diff options
Diffstat (limited to 'spec/models/onboarding_progress_spec.rb')
-rw-r--r-- | spec/models/onboarding_progress_spec.rb | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/spec/models/onboarding_progress_spec.rb b/spec/models/onboarding_progress_spec.rb index bd951846bb8..0aa19345a25 100644 --- a/spec/models/onboarding_progress_spec.rb +++ b/spec/models/onboarding_progress_spec.rb @@ -29,6 +29,67 @@ RSpec.describe OnboardingProgress do end end + describe 'scopes' do + describe '.incomplete_actions' do + subject { described_class.incomplete_actions(actions) } + + let!(:no_actions_completed) { create(:onboarding_progress) } + let!(:one_action_completed_one_action_incompleted) { create(:onboarding_progress, "#{action}_at" => Time.current) } + + context 'when given one action' do + let(:actions) { action } + + it { is_expected.to eq [no_actions_completed] } + end + + context 'when given an array of actions' do + let(:actions) { [action, :git_write] } + + it { is_expected.to eq [no_actions_completed] } + end + end + + describe '.completed_actions' do + subject { described_class.completed_actions(actions) } + + let!(:one_action_completed_one_action_incompleted) { create(:onboarding_progress, "#{action}_at" => Time.current) } + let!(:both_actions_completed) { create(:onboarding_progress, "#{action}_at" => Time.current, git_write_at: Time.current) } + + context 'when given one action' do + let(:actions) { action } + + it { is_expected.to eq [one_action_completed_one_action_incompleted, both_actions_completed] } + end + + context 'when given an array of actions' do + let(:actions) { [action, :git_write] } + + it { is_expected.to eq [both_actions_completed] } + end + end + + describe '.completed_actions_with_latest_in_range' do + subject { described_class.completed_actions_with_latest_in_range(actions, 1.day.ago.beginning_of_day..1.day.ago.end_of_day) } + + let!(:one_action_completed_in_range_one_action_incompleted) { create(:onboarding_progress, "#{action}_at" => 1.day.ago.middle_of_day) } + let!(:git_write_action_completed_in_range) { create(:onboarding_progress, git_write_at: 1.day.ago.middle_of_day) } + let!(:both_actions_completed_latest_action_out_of_range) { create(:onboarding_progress, "#{action}_at" => 1.day.ago.middle_of_day, git_write_at: Time.current) } + let!(:both_actions_completed_latest_action_in_range) { create(:onboarding_progress, "#{action}_at" => 1.day.ago.middle_of_day, git_write_at: 2.days.ago.middle_of_day) } + + context 'when given one action' do + let(:actions) { :git_write } + + it { is_expected.to eq [git_write_action_completed_in_range] } + end + + context 'when given an array of actions' do + let(:actions) { [action, :git_write] } + + it { is_expected.to eq [both_actions_completed_latest_action_in_range] } + end + end + end + describe '.onboard' do subject(:onboard) { described_class.onboard(namespace) } @@ -53,6 +114,22 @@ RSpec.describe OnboardingProgress do end end + describe '.onboarding?' do + subject(:onboarding?) { described_class.onboarding?(namespace) } + + context 'when onboarded' do + before do + described_class.onboard(namespace) + end + + it { is_expected.to eq true } + end + + context 'when not onboarding' do + it { is_expected.to eq false } + end + end + describe '.register' do subject(:register_action) { described_class.register(namespace, action) } @@ -104,4 +181,10 @@ RSpec.describe OnboardingProgress do end end end + + describe '.column_name' do + subject { described_class.column_name(action) } + + it { is_expected.to eq(:subscription_created_at) } + end end |