164 lines
4.5 KiB
Ruby
Executable File
164 lines
4.5 KiB
Ruby
Executable File
require "test_helper"
|
|
|
|
class EventTest < ActiveSupport::TestCase
|
|
# Test that Event model exists
|
|
test "should be a class" do
|
|
assert_kind_of Class, Event
|
|
end
|
|
|
|
# Test validations
|
|
test "should not save event without name" do
|
|
event = Event.new(description: "Test event description")
|
|
assert_not event.save
|
|
end
|
|
|
|
test "should not save event without description" do
|
|
event = Event.new(name: "Test Event")
|
|
assert_not event.save
|
|
end
|
|
|
|
test "should not save event with name less than 3 characters" do
|
|
event = Event.new(name: "AB", description: "Valid description for the event")
|
|
assert_not event.save
|
|
end
|
|
|
|
test "should not save event with description less than 10 characters" do
|
|
event = Event.new(name: "Valid Event Name", description: "Too short")
|
|
assert_not event.save
|
|
end
|
|
|
|
test "should not save event without latitude" do
|
|
event = Event.new(
|
|
name: "Valid Event Name",
|
|
description: "Valid description for the event that is long enough",
|
|
longitude: 2.3522
|
|
)
|
|
assert_not event.save
|
|
end
|
|
|
|
test "should not save event without longitude" do
|
|
event = Event.new(
|
|
name: "Valid Event Name",
|
|
description: "Valid description for the event that is long enough",
|
|
latitude: 48.8566
|
|
)
|
|
assert_not event.save
|
|
end
|
|
|
|
test "should not save event with invalid latitude" do
|
|
event = Event.new(
|
|
name: "Valid Event Name",
|
|
description: "Valid description for the event that is long enough",
|
|
latitude: 95.0,
|
|
longitude: 2.3522,
|
|
venue_name: "Test Venue",
|
|
venue_address: "123 Test Street"
|
|
)
|
|
assert_not event.save
|
|
end
|
|
|
|
test "should not save event with invalid longitude" do
|
|
event = Event.new(
|
|
name: "Valid Event Name",
|
|
description: "Valid description for the event that is long enough",
|
|
latitude: 48.8566,
|
|
longitude: 190.0,
|
|
venue_name: "Test Venue",
|
|
venue_address: "123 Test Street"
|
|
)
|
|
assert_not event.save
|
|
end
|
|
|
|
test "should not save event without slug" do
|
|
event = Event.new(
|
|
name: "Valid Event Name",
|
|
description: "Valid description for the event that is long enough",
|
|
latitude: 48.8566,
|
|
longitude: 2.3522,
|
|
venue_name: "Test Venue",
|
|
venue_address: "123 Test Street"
|
|
)
|
|
assert_not event.save
|
|
end
|
|
|
|
test "should not save event with slug less than 3 characters" do
|
|
event = Event.new(
|
|
name: "Valid Event Name",
|
|
description: "Valid description for the event that is long enough",
|
|
latitude: 48.8566,
|
|
longitude: 2.3522,
|
|
venue_name: "Test Venue",
|
|
venue_address: "123 Test Street",
|
|
slug: "ab"
|
|
)
|
|
assert_not event.save
|
|
end
|
|
|
|
test "should save valid event" do
|
|
user = User.create!(
|
|
email: "test@example.com",
|
|
password: "password123",
|
|
password_confirmation: "password123"
|
|
)
|
|
|
|
event = Event.new(
|
|
name: "Valid Event Name",
|
|
slug: "valid-event-name",
|
|
description: "Valid description for the event that is long enough",
|
|
latitude: 48.8566,
|
|
longitude: 2.3522,
|
|
venue_name: "Test Venue",
|
|
venue_address: "123 Test Street",
|
|
user: user,
|
|
)
|
|
assert event.save
|
|
end
|
|
|
|
# Test enum states
|
|
test "should have valid states" do
|
|
assert_equal %w[draft published canceled sold_out], Event.states.keys
|
|
end
|
|
|
|
test "should default to draft state" do
|
|
event = Event.new(
|
|
name: "Valid Event Name",
|
|
description: "Valid description for the event that is long enough",
|
|
latitude: 48.8566,
|
|
longitude: 2.3522,
|
|
venue_name: "Test Venue",
|
|
venue_address: "123 Test Street"
|
|
)
|
|
assert_equal "draft", event.state
|
|
end
|
|
|
|
# Test associations
|
|
test "should belong to user" do
|
|
association = Event.reflect_on_association(:user)
|
|
assert_equal :belongs_to, association.macro
|
|
end
|
|
|
|
test "should have many ticket_types" do
|
|
association = Event.reflect_on_association(:ticket_types)
|
|
assert_equal :has_many, association.macro
|
|
end
|
|
|
|
test "should have many tickets through ticket_types" do
|
|
association = Event.reflect_on_association(:tickets)
|
|
assert_equal :has_many, association.macro
|
|
assert_equal :ticket_types, association.options[:through]
|
|
end
|
|
|
|
# Test scopes
|
|
test "should respond to featured scope" do
|
|
assert_respond_to Event, :featured
|
|
end
|
|
|
|
test "should respond to published scope" do
|
|
assert_respond_to Event, :published
|
|
end
|
|
|
|
test "should respond to search_by_name scope" do
|
|
assert_respond_to Event, :search_by_name
|
|
end
|
|
end
|