From bef7a62cfdd078c6325d9f4db25b2285dcf182ea Mon Sep 17 00:00:00 2001 From: Martin Mladenov <m.mladenov@student.tudelft.nl> Date: Sun, 15 Jan 2023 12:57:30 +0200 Subject: [PATCH 1/3] Add tests for project status transitions --- test/models/project_test.rb | 147 ++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) diff --git a/test/models/project_test.rb b/test/models/project_test.rb index 846ce5de4..ac84f6958 100644 --- a/test/models/project_test.rb +++ b/test/models/project_test.rb @@ -63,4 +63,151 @@ class ProjectTest < ActiveSupport::TestCase project = projects(:taken_project_client_approved_group) assert_not_includes(Project.where(course_edition_id: course_edition.id).untaken.ids, project.id) end + + # tests for project status transitions + test 'rejecting approved project marks it as not approved' do + project = projects(:bepsys_empty) + assert_equal 'approved', project.status + assert_not_nil project.approved_at + + project.status = :rejected + project.save! + + assert_nil project.approved_at + end + + test 'rejecting pending project keeps it marked as not approved' do + project = projects(:bepsys_pending) + assert_equal 'pending', project.status + assert_nil project.approved_at + + project.status = :rejected + project.save! + + assert_nil project.approved_at + end + + test 'reverting approved project to pending marks it as not approved' do + project = projects(:bepsys_empty) + assert_equal 'approved', project.status + assert_not_nil project.approved_at + + project.status = :pending + project.save! + + assert_nil project.approved_at + end + + test 'updating approved project keeps it marked as approved' do + project = projects(:bepsys_empty) + assert_equal 'approved', project.status + assert_not_nil project.approved_at + + project.status = :updated + project.save! + + assert_not_nil project.approved_at + end + + test 'approving rejected project marks it as approved' do + project = projects(:bepsys_pending) + project.status = :rejected + project.save! + assert_equal 'rejected', project.status + assert_nil project.approved_at + + project.status = :approved + project.save! + + assert_not_nil project.approved_at + end + + test 'rejecting update of approved project keeps it marked as approved' do + project = projects(:bepsys_empty) + assert_equal 'approved', project.status + assert_not_nil project.approved_at + + project.status = :updated + project.save! + + project.status = :update_rejected + project.save! + + assert_not_nil project.approved_at + end + + test 'updating approved project twice keeps it marked as approved' do + project = projects(:bepsys_empty) + assert_equal 'approved', project.status + assert_not_nil project.approved_at + + project.status = :updated + project.save! + + project.status = :updated + project.save! + + assert_not_nil project.approved_at + end + + test 'updating pending project twice keeps it marked as not approved' do + project = projects(:bepsys_pending) + assert_equal 'pending', project.status + assert_nil project.approved_at + + project.status = :pending + project.save! + + project.status = :pending + project.save! + + assert_nil project.approved_at + end + + test 'approving project marks it as approved' do + project = projects(:bepsys_pending) + assert_equal 'pending', project.status + assert_nil project.approved_at + + project.status = :approved + project.save! + + assert_not_nil project.approved_at + end + + test 'requesting changes on a pending project keeps it marked as not approved' do + project = projects(:bepsys_pending) + assert_equal 'pending', project.status + assert_nil project.approved_at + + project.status = :changes_requested + project.save! + + assert_nil project.approved_at + end + + test 'requesting changes on an updated approved project keeps it marked as approved' do + project = projects(:bepsys_empty) + assert_equal 'approved', project.status + assert_not_nil project.approved_at + + project.status = :updated + project.save! + + project.status = :changes_requested + project.save! + + assert_not_nil project.approved_at + end + + test 'deactivating approved project keeps it marked as approved' do + project = projects(:bepsys_empty) + assert_equal 'approved', project.status + assert_not_nil project.approved_at + + project.status = :deactivated + project.save! + + assert_not_nil project.approved_at + end end -- GitLab From 8b8f880e0bc71e25b12c1c04b05489cf88e985dc Mon Sep 17 00:00:00 2001 From: Martin Mladenov <m.mladenov@student.tudelft.nl> Date: Sun, 15 Jan 2023 12:57:53 +0200 Subject: [PATCH 2/3] Unset approved_at if project status is reverted to pending --- app/models/project.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index f8a96f10b..77478cc8c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -107,7 +107,7 @@ class Project < ApplicationRecord # Before updating, if the status changed to approved, set approved_at before_update :set_approved_at, if: (-> { status_changed?(to: 'approved') && approved_at.blank? }) # Before updating, if the status changed to rejected, unset approved_at - before_update :unset_approved_at, if: (-> { status_changed?(to: 'rejected') }) + before_update :unset_approved_at, if: (-> { status_changed?(to: 'rejected') || status_changed?(to: 'pending') }) # Before updating, if the status changed to approved and the proposal is recurrent, copy to existing course editions before_update :assign_to_recurrent_editions, if: (-> { status_changed?(to: 'approved') }) -- GitLab From bfd963edcb1cb4926c46a3bc8310ef7f108f7fba Mon Sep 17 00:00:00 2001 From: Martin Mladenov <m.mladenov@student.tudelft.nl> Date: Sun, 15 Jan 2023 12:58:53 +0200 Subject: [PATCH 3/3] Add test for reverting updated project to pending --- test/models/project_test.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/models/project_test.rb b/test/models/project_test.rb index ac84f6958..ee290ae59 100644 --- a/test/models/project_test.rb +++ b/test/models/project_test.rb @@ -98,6 +98,21 @@ class ProjectTest < ActiveSupport::TestCase assert_nil project.approved_at end + test 'reverting updated project to pending marks it as not approved' do + project = projects(:bepsys_empty) + assert_equal 'approved', project.status + assert_not_nil project.approved_at + + project.status = :updated + project.save! + assert_not_nil project.approved_at + + project.status = :pending + project.save! + + assert_nil project.approved_at + end + test 'updating approved project keeps it marked as approved' do project = projects(:bepsys_empty) assert_equal 'approved', project.status -- GitLab