From 0de8e1ad1456ca86ff9cb5ec1059b99b4a725e57 Mon Sep 17 00:00:00 2001 From: Runar Ingebrigtsen Date: Thu, 22 Jan 2026 15:54:43 +0100 Subject: [PATCH] add tests --- test/fixtures/entry_versions.yml | 4 +- test/fixtures/suggested_meanings.yml | 12 ++--- test/fixtures/supported_languages.yml | 18 ++++---- test/fixtures/users.yml | 20 ++++----- test/models/comment_test.rb | 28 ++++++++++-- test/models/entry_test.rb | 42 +++++++++++++++-- test/models/entry_version_test.rb | 35 +++++++++++++-- test/models/suggested_meaning_test.rb | 62 ++++++++++++++++++++++++-- test/models/supported_language_test.rb | 13 ++++-- test/models/user_test.rb | 33 ++++++++++++-- 10 files changed, 220 insertions(+), 47 deletions(-) diff --git a/test/fixtures/entry_versions.yml b/test/fixtures/entry_versions.yml index 5e06c49..111d6de 100644 --- a/test/fixtures/entry_versions.yml +++ b/test/fixtures/entry_versions.yml @@ -3,11 +3,11 @@ one: entry: one user: one - changes_made: + changes_made: "{}" change_type: MyString two: entry: two user: two - changes_made: + changes_made: "{}" change_type: MyString diff --git a/test/fixtures/suggested_meanings.yml b/test/fixtures/suggested_meanings.yml index 9d2df05..7c5dc30 100644 --- a/test/fixtures/suggested_meanings.yml +++ b/test/fixtures/suggested_meanings.yml @@ -2,26 +2,22 @@ one: entry: one - language_code: MyString + language_code: "en" alternative_translation: MyString context: MyText reasoning: MyText source: MyString region: MyString - status: 1 + status: :pending submitted_by: one - reviewed_by: one - reviewed_at: 2026-01-22 13:38:22 two: entry: two - language_code: MyString + language_code: "fi" alternative_translation: MyString context: MyText reasoning: MyText source: MyString region: MyString - status: 1 + status: :pending submitted_by: two - reviewed_by: two - reviewed_at: 2026-01-22 13:38:22 diff --git a/test/fixtures/supported_languages.yml b/test/fixtures/supported_languages.yml index 88c82cf..0994ed4 100644 --- a/test/fixtures/supported_languages.yml +++ b/test/fixtures/supported_languages.yml @@ -1,15 +1,15 @@ # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html one: - code: MyString - name: MyString - native_name: MyString + code: "en" + name: "English" + native_name: "English" sort_order: 1 - active: false + active: true two: - code: MyString - name: MyString - native_name: MyString - sort_order: 1 - active: false + code: "fi" + name: "Finnish" + native_name: "Suomi" + sort_order: 2 + active: true diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index 44f2480..7a9decc 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -1,23 +1,23 @@ # Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html one: - email: MyString - password_digest: MyString - name: MyString + email: "one@example.com" + password_digest: <%= BCrypt::Password.create('password') %> + name: "User One" role: 1 - primary_language: MyString - invitation_token: MyString + primary_language: "en" + invitation_token: "one" invitation_sent_at: 2026-01-22 13:38:37 invitation_accepted_at: 2026-01-22 13:38:37 invited_by: one two: - email: MyString - password_digest: MyString - name: MyString + email: "two@example.com" + password_digest: <%= BCrypt::Password.create('password') %> + name: "User Two" role: 1 - primary_language: MyString - invitation_token: MyString + primary_language: "fi" + invitation_token: "two" invitation_sent_at: 2026-01-22 13:38:37 invitation_accepted_at: 2026-01-22 13:38:37 invited_by: two diff --git a/test/models/comment_test.rb b/test/models/comment_test.rb index 5a6feda..4734d51 100644 --- a/test/models/comment_test.rb +++ b/test/models/comment_test.rb @@ -1,7 +1,29 @@ require "test_helper" class CommentTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + test "should be valid with a user, body, and commentable" do + user = users(:one) + entry = entries(:one) + comment = Comment.new(user: user, body: "This is a comment.", commentable: entry) + assert comment.valid? + end + + test "should be invalid without a body" do + user = users(:one) + entry = entries(:one) + comment = Comment.new(user: user, commentable: entry) + assert_not comment.valid? + end + + test "should be invalid without a user" do + entry = entries(:one) + comment = Comment.new(body: "This is a comment.", commentable: entry) + assert_not comment.valid? + end + + test "should be invalid without a commentable" do + user = users(:one) + comment = Comment.new(user: user, body: "This is a comment.") + assert_not comment.valid? + end end diff --git a/test/models/entry_test.rb b/test/models/entry_test.rb index aae0b02..8321cf2 100644 --- a/test/models/entry_test.rb +++ b/test/models/entry_test.rb @@ -1,7 +1,43 @@ require "test_helper" class EntryTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + test "should be valid with a category" do + entry = Entry.new(category: :word) + assert entry.valid? + end + + test "should be invalid without a category" do + entry = Entry.new(category: nil) + assert_not entry.valid? + end + + test "can be a word" do + entry = Entry.new(category: :word) + assert entry.word? + end + + test "can be a phrase" do + entry = Entry.new(category: :phrase) + assert entry.phrase? + end + + test "can be a proper_name" do + entry = Entry.new(category: :proper_name) + assert entry.proper_name? + end + + test "can be a title" do + entry = Entry.new(category: :title) + assert entry.title? + end + + test "can be a reference" do + entry = Entry.new(category: :reference) + assert entry.reference? + end + + test "can be other" do + entry = Entry.new(category: :other) + assert entry.other? + end end diff --git a/test/models/entry_version_test.rb b/test/models/entry_version_test.rb index 19cbb89..67f0c6e 100644 --- a/test/models/entry_version_test.rb +++ b/test/models/entry_version_test.rb @@ -1,7 +1,36 @@ require "test_helper" class EntryVersionTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + test "should be valid with all attributes" do + version = EntryVersion.new( + entry: entries(:one), + user: users(:one), + changes_made: { "fi" => "uusi sana" } + ) + assert version.valid? + end + + test "should be invalid without changes_made" do + version = EntryVersion.new( + entry: entries(:one), + user: users(:one) + ) + assert_not version.valid? + end + + test "should be invalid without an entry" do + version = EntryVersion.new( + user: users(:one), + changes_made: { "fi" => "uusi sana" } + ) + assert_not version.valid? + end + + test "should be invalid without a user" do + version = EntryVersion.new( + entry: entries(:one), + changes_made: { "fi" => "uusi sana" } + ) + assert_not version.valid? + end end diff --git a/test/models/suggested_meaning_test.rb b/test/models/suggested_meaning_test.rb index efc27fb..f37ae13 100644 --- a/test/models/suggested_meaning_test.rb +++ b/test/models/suggested_meaning_test.rb @@ -1,7 +1,63 @@ require "test_helper" class SuggestedMeaningTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + test "should be valid with all attributes" do + meaning = SuggestedMeaning.new( + entry: entries(:one), + language_code: supported_languages(:one).code, + alternative_translation: "New Translation", + submitted_by: users(:one) + ) + assert meaning.valid? + end + + test "should be invalid without a language_code" do + meaning = SuggestedMeaning.new( + entry: entries(:one), + alternative_translation: "New Translation", + submitted_by: users(:one) + ) + assert_not meaning.valid? + end + + test "should be invalid without an alternative_translation" do + meaning = SuggestedMeaning.new( + entry: entries(:one), + language_code: supported_languages(:one).code, + submitted_by: users(:one) + ) + assert_not meaning.valid? + end + + test "should have a default status of pending" do + meaning = SuggestedMeaning.new( + entry: entries(:one), + language_code: supported_languages(:one).code, + alternative_translation: "New Translation", + submitted_by: users(:one) + ) + assert meaning.pending? + end + + test "can be accepted" do + meaning = SuggestedMeaning.new( + entry: entries(:one), + language_code: supported_languages(:one).code, + alternative_translation: "New Translation", + submitted_by: users(:one), + status: :accepted + ) + assert meaning.accepted? + end + + test "can be rejected" do + meaning = SuggestedMeaning.new( + entry: entries(:one), + language_code: supported_languages(:one).code, + alternative_translation: "New Translation", + submitted_by: users(:one), + status: :rejected + ) + assert meaning.rejected? + end end diff --git a/test/models/supported_language_test.rb b/test/models/supported_language_test.rb index a36ee53..8af3b75 100644 --- a/test/models/supported_language_test.rb +++ b/test/models/supported_language_test.rb @@ -1,7 +1,14 @@ require "test_helper" class SupportedLanguageTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + test "should be valid with all attributes" do + language = SupportedLanguage.new(code: "es", name: "Spanish", native_name: "EspaƱol") + assert language.valid? + end + + test "should be invalid with a duplicate code" do + SupportedLanguage.create(code: "de", name: "German", native_name: "Deutsch") + language = SupportedLanguage.new(code: "de", name: "German", native_name: "Deutsch") + assert_not language.valid? + end end diff --git a/test/models/user_test.rb b/test/models/user_test.rb index 5c07f49..0020ba5 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -1,7 +1,34 @@ require "test_helper" class UserTest < ActiveSupport::TestCase - # test "the truth" do - # assert true - # end + test "should be valid with an email and password" do + user = User.new(email: "test@example.com", password: "password") + assert user.valid? + end + + test "should be invalid without an email" do + user = User.new(password: "password") + assert_not user.valid? + end + + test "should be invalid with a duplicate email" do + User.create(email: "test@example.com", password: "password") + user = User.new(email: "test@example.com", password: "password") + assert_not user.valid? + end + + test "should have a default role of contributor" do + user = User.new(email: "test@example.com", password: "password") + assert user.contributor? + end + + test "can be a reviewer" do + user = User.new(email: "test@example.com", password: "password", role: :reviewer) + assert user.reviewer? + end + + test "can be an admin" do + user = User.new(email: "test@example.com", password: "password", role: :admin) + assert user.admin? + end end