Sha256: 55c1c88fc133da2593e1b43787a05e7a6744616ac077e8d57d824e99393f33b7

Contents?: true

Size: 1.96 KB

Versions: 10

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true

#######################################
# SPEC IS DEPENDENT ON DEFINED ORDER!
#######################################
#
# Assumes that attribute is a string attribute without restrictions.
shared_examples_for '.save' do |attribute, additional_attrs: {}|
  describe '.save' do
    let(:new_hash) { additional_attrs.merge(attribute => value) }
    let(:new_model) { described_class::MODEL.new(new_hash) }
    let(:save_new) { VCR.use_cassette("#{vcr_dir}/save_new") { repository.save(new_model) } }
    let(:entity_wrapper) { repository.mapper.class::JSON_ENTITY_WRAPPER }
    let(:value) { 'A value' }

    shared_examples_for 'save' do
      before do
        if model.saved?
          message = 'Test trying to save model, but already marked as saved!'
          message << " Model: #{model.inspect}"
          raise(message)
        end
      end

      specify "includes correct #{attribute.inspect}" do
        saved_entity = send_request
        expect(saved_entity.send(attribute)).to eql(value)
      end
    end

    describe 'new' do
      context 'when not saved' do
        include_examples 'save' do
          let(:model) { new_model }
          let(:send_request) { save_new }
        end
      end

      context "saved #{described_class::MODEL}" do
        let(:hash) { { unsaved: false }.merge(new_hash) }
        let(:model) { described_class::MODEL.new(hash) }

        specify { expect(repository.save(model)).to be(true) }
      end
    end

    describe 'old (update existing)' do
      include_examples 'save' do
        let(:value) { "Updated #{attribute}" }
        let(:model) do
          new_id = save_new.unique_id
          new_record = VCR.use_cassette("#{vcr_dir}/find_new") { repository.find(new_id) }
          new_record.update(attribute => value)
        end
        let(:send_request) do
          VCR.use_cassette("#{vcr_dir}/save_old") { repository.save(model) }
        end
      end
    end
  end
end
# rubocop:enable RSpec/DescribeClass

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
fortnox-api-0.8.2 spec/fortnox/api/repositories/examples/save.rb
fortnox-api-0.8.1 spec/fortnox/api/repositories/examples/save.rb
fortnox-api-0.8.0 spec/fortnox/api/repositories/examples/save.rb
fortnox-api-0.7.2 spec/fortnox/api/repositories/examples/save.rb
fortnox-api-0.7.1 spec/fortnox/api/repositories/examples/save.rb
fortnox-api-0.7.0 spec/fortnox/api/repositories/examples/save.rb
fortnox-api-0.6.3 spec/fortnox/api/repositories/examples/save.rb
fortnox-api-0.6.2 spec/fortnox/api/repositories/examples/save.rb
fortnox-api-0.6.1 spec/fortnox/api/repositories/examples/save.rb
fortnox-api-0.6.0 spec/fortnox/api/repositories/examples/save.rb