-
Notifications
You must be signed in to change notification settings - Fork 1
Testing transitions with RSpec
CodeMeister edited this page Mar 7, 2023
·
3 revisions
Include the RSpec test helpers:
require 'state_gate/rspec'
The RSpec matcher allow_transitions_on
tests the transitions for a given
attribute state.
With the follow configuration...
class Post < ActiveRecord::Base
include StateGate
state_gate :status do
state :draft
state :pending
state :published
state :archived
make_sequential
end
end
...it passes with the correct transitions for the state.
expect(Post).to allow_transitions_on(:status).from(:draft).to(:pending)
#=> success
expect(Post).to allow_transitions_on(:status).from(:pending).to(:draft, :Published)
#=> success
...it fails with a missing transition.
expect(Post).to allow_transitions_on(:status).from(:pending).to(:Published)
#=> fails: ':pending is allowed to transition from :pending to :draft.'
...it fails with a non-defined transition.
expect(Post).to allow_transitions_on(:status).from(:draft).to(:pending, :dummy)
#=> fails: '#status does not transition from :draft to :dummy.'
...it fails with the wrong attribute.
expect(Post).to allow_transitions_on(:dummy).from(:pending).to(:draft, :Published)
#=> fails: 'no state_gate is defined for #dummy.'