Files
aperonight/test/models/user_test.rb
kbe 89bda03f45 feat: Implement comprehensive onboarding system for new users
Add complete user onboarding flow that redirects new users to complete their
profile before accessing the application:

- Add onboarding_completed boolean field to users with migration
- Create OnboardingController with form validation and completion logic
- Design professional onboarding UI with progressive disclosure for company info
- Implement Stimulus controller for toggling company information section
- Add application-wide redirect middleware for incomplete users
- Create comprehensive test suite for all onboarding functionality
- Update test fixtures and helpers to support onboarding in existing tests

The onboarding collects required first/last name and optional company information.
Users are redirected to onboarding after login until profile is completed.
Features smooth animations, full-width form button, and clean UX design.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-10 20:49:05 +02:00

96 lines
3.5 KiB
Ruby
Executable File

require "test_helper"
class UserTest < ActiveSupport::TestCase
# Test that User model exists
test "should be a class" do
assert_kind_of Class, User
end
# Test Devise modules
test "should include devise modules" do
user = User.new
assert user.respond_to?(:email)
assert user.respond_to?(:encrypted_password)
end
# Test associations
test "should have many events" do
association = User.reflect_on_association(:events)
assert_equal :has_many, association.macro
assert_equal :destroy, association.options[:dependent]
end
test "should have many tickets" do
association = User.reflect_on_association(:tickets)
assert_equal :has_many, association.macro
assert_equal :destroy, association.options[:dependent]
end
# Test first_name validations
test "should validate presence of first_name" do
user = User.new(last_name: "Doe")
refute user.valid?, "User with blank first_name should be invalid"
assert_not_nil user.errors[:first_name], "No validation error for blank first_name"
end
test "should validate length of first_name" do
# Test minimum length
user = User.new(first_name: "A", last_name: "Doe")
refute user.valid?, "User with first_name shorter than 3 chars should be invalid"
assert_not_nil user.errors[:first_name], "No validation error for too short first_name"
# Test maximum length
user = User.new(first_name: "A" * 13, last_name: "Doe")
refute user.valid?, "User with first_name longer than 12 chars should be invalid"
assert_not_nil user.errors[:first_name], "No validation error for too long first_name"
end
# Test last_name validations
test "should validate presence of last_name" do
user = User.new(first_name: "John")
refute user.valid?, "User with blank last_name should be invalid"
assert_not_nil user.errors[:last_name], "No validation error for blank last_name"
end
test "should validate length of last_name" do
# Test minimum length
user = User.new(first_name: "John", last_name: "Do")
refute user.valid?, "User with last_name shorter than 3 chars should be invalid"
assert_not_nil user.errors[:last_name], "No validation error for too short last_name"
# Test maximum length
user = User.new(first_name: "John", last_name: "D" * 13)
refute user.valid?, "User with last_name longer than 12 chars should be invalid"
assert_not_nil user.errors[:last_name], "No validation error for too long last_name"
end
# Test onboarding functionality
test "new users should need onboarding by default" do
user = User.new(email: "test@example.com", password: "password123")
assert user.needs_onboarding?, "New user should need onboarding"
assert_not user.onboarding_completed?, "New user should not have completed onboarding"
end
test "should complete onboarding" do
user = users(:one)
user.update!(onboarding_completed: false)
assert user.needs_onboarding?, "User should need onboarding initially"
user.complete_onboarding!
assert_not user.needs_onboarding?, "User should not need onboarding after completion"
assert user.onboarding_completed?, "User should have completed onboarding"
end
test "needs_onboarding? should return correct value" do
user = users(:one)
user.update!(onboarding_completed: false)
assert user.needs_onboarding?, "User with false onboarding_completed should need onboarding"
user.update!(onboarding_completed: true)
assert_not user.needs_onboarding?, "User with true onboarding_completed should not need onboarding"
end
end