diff --git a/.github/workflows/rails_application-coverage.yml b/.github/workflows/rails_application-coverage.yml index 8f2ea509..3e9e41f2 100644 --- a/.github/workflows/rails_application-coverage.yml +++ b/.github/workflows/rails_application-coverage.yml @@ -9,10 +9,12 @@ on: - master paths: - "apps/rails_application/Gemfile.lock" + - "apps/rails_application/.mutant.yml" - ".github/workflows/rails_application-coverage.yml" pull_request: paths: - "apps/rails_application/Gemfile.lock" + - "apps/rails_application/.mutant.yml" - ".github/workflows/rails_application-coverage.yml" schedule: - cron: '0 17 * * *' diff --git a/apps/rails_application/.mutant.yml b/apps/rails_application/.mutant.yml index 29600ca5..97263c60 100644 --- a/apps/rails_application/.mutant.yml +++ b/apps/rails_application/.mutant.yml @@ -1,4 +1,6 @@ --- +environment_variables: + RAILS_ENV: test mutation: operators: light timeout: 10.0 diff --git a/apps/rails_application/Makefile b/apps/rails_application/Makefile index 3898e74f..61d0ef99 100644 --- a/apps/rails_application/Makefile +++ b/apps/rails_application/Makefile @@ -6,9 +6,18 @@ install: ## Installs dependencies, runs migrations, creates db & seeds if necess dev: @$(MAKE) -j 2 web css -mutate: ## Run full mutation tests +build-tailwind: + @echo "Building Tailwind CSS..." + @bin/rails tailwindcss:build + +mutate: build-tailwind +ifdef MUTANT_SUBJECT + @echo "Running mutation tests for subject: '$(MUTANT_SUBJECT)'" + @bundle exec mutant run $(MUTANT_OPTS) -- '$(MUTANT_SUBJECT)' +else @echo "Running full mutation tests..." - @RAILS_ENV=test bundle exec mutant run + @bundle exec mutant run $(MUTANT_OPTS) +endif mutate-changes: ## Run incremental mutation tests on changes @echo "Running incremental mutation tests against $(GIT_BASE_SHA)..." @@ -86,9 +95,7 @@ mutate-client-authentication: ## Run mutation tests for ClientAuthentication nam @echo "Running mutation tests for ClientAuthentication..." @RAILS_ENV=test bundle exec mutant run "ClientAuthentication*" -test: ## Run unit tests - @echo "Building Tailwind CSS..." - @bin/rails tailwindcss:build +test: build-tailwind @echo "Running unit tests..." @BROWSERSLIST_IGNORE_OLD_DATA=1 bin/rails test @@ -101,9 +108,8 @@ css: web: @bin/rails server -p 3000 -test-mutant-runner: - @bin/rails tailwindcss:build +test-mutant-runner: build-tailwind @RAILS_ENV=test bundle exec mutant test -j 4 -.PHONY: help install dev test mutate mutate-changes mutate-processes mutate-orders mutate-order-header mutate-client-orders mutate-invoices mutate-shipments mutate-vat-rates mutate-coupons mutate-products mutate-public-offer mutate-customers mutate-admin mutate-time-promotions mutate-returns mutate-availability mutate-client-inbox mutate-authorization mutate-client-authentication css web test-mutant-runner +.PHONY: help install dev build-tailwind test mutate mutate-changes mutate-processes mutate-orders mutate-order-header mutate-client-orders mutate-invoices mutate-shipments mutate-vat-rates mutate-coupons mutate-products mutate-public-offer mutate-customers mutate-admin mutate-time-promotions mutate-returns mutate-availability mutate-client-inbox mutate-authorization mutate-client-authentication css web test-mutant-runner .DEFAULT_GOAL := help diff --git a/apps/rails_application/test/invoices/assign_store_to_invoice_test.rb b/apps/rails_application/test/invoices/assign_store_to_invoice_test.rb index 439deb91..4768a44b 100644 --- a/apps/rails_application/test/invoices/assign_store_to_invoice_test.rb +++ b/apps/rails_application/test/invoices/assign_store_to_invoice_test.rb @@ -91,5 +91,37 @@ def test_assigns_store_to_correct_invoice_when_multiple_invoices_exist assert_equal(store_id_1, invoice_1.store_id) assert_equal(store_id_2, invoice_2.store_id) end + + def test_returns_nil_when_invoice_exists_in_different_store + event_store = Rails.configuration.event_store + store_id_1 = SecureRandom.uuid + store_id_2 = SecureRandom.uuid + invoice_id = SecureRandom.uuid + + event_store.publish( + Invoicing::InvoiceItemAdded.new( + data: { + invoice_id: invoice_id, + product_id: SecureRandom.uuid, + title: "Test Product", + quantity: 1, + unit_price: 100, + vat_rate: { rate: 20, code: "VAT" } + } + ) + ) + + event_store.publish( + Stores::InvoiceRegistered.new( + data: { + store_id: store_id_1, + invoice_id: invoice_id + } + ) + ) + + assert_nil Invoices.find_invoice_in_store(invoice_id, store_id_2) + assert_not_nil Invoices.find_invoice_in_store(invoice_id, store_id_1) + end end end diff --git a/apps/rails_application/test/test_helper.rb b/apps/rails_application/test/test_helper.rb index 5f5bfb79..1bbc3e48 100644 --- a/apps/rails_application/test/test_helper.rb +++ b/apps/rails_application/test/test_helper.rb @@ -142,6 +142,7 @@ def before_setup Configuration.new.call(Rails.configuration.event_store, Rails.configuration.command_bus) @default_store_id = ensure_default_store + cookies[:current_store_id] = @default_store_id result end