text: require 'pact_broker/matrix/quick_row'
  require 'pact_broker/matrix/resolved_selector'
  
  module PactBroker
    module Matrix
      describe QuickRow do
        describe "the interface" do
          before do
            td.create_pact_with_hierarchy("A", "1", "B")
              .create_verification(provider_version: '1', success: false)
              .create_verification(provider_version: '1', number: 2, success: true)
              .create_verification(provider_version: '2', number: 3, success: true)
              .create_provider("C")
              .create_pact
              .create_verification(provider_version: '1')
              .create_consumer_version("2")
              .create_pact
              .create_verification(provider_version: '3')
              .use_provider("B")
              .create_pact
          end
  
          it "behaves like a Row, except quicker" do
            a_id = QuickRow.db[:pacticipants].where(name: "A").select(:id).single_record[:id]
            rows = QuickRow.default_scope.where(consumer_id: a_id).eager(:consumer).eager(:verification).all
            expect(rows.first.consumer).to be rows.last.consumer
            expect(rows.first.verification).to_not be nil
            expect(rows.first.consumer_name).to_not be nil
            expect(rows.first.provider_name).to_not be nil
          end
  
        end
  
        describe "order_by_last_action_date" do
          subject { QuickRow.default_scope.order_by_last_action_date }
  
          context "when there are two pacts verified at the same time" do
            before do
              td.create_consumer("Foo")
                .create_provider("Bar")
                .create_consumer_version("10")
                .create_pact(created_at: day_1)
                .create_verification(provider_version: "2", created_at: day_3)
                .create_consumer_version("3")
                .create_pact(created_at: day_2)
                .create_verification(provider_version: "2", created_at: day_3)
            end
  
            let(:day_1) { DateTime.now + 1  }
            let(:day_2) { DateTime.now + 2  }
            let(:day_3) { DateTime.now + 3  }
  
            it "orders by the pact publication id desc" do
              expect(subject.first.last_action_date).to eq subject.last.last_action_date
              expect(subject.first.consumer_version_number).to eq "3"
              expect(subject.last.consumer_version_number).to eq "10"
            end
          end
  
          context "when a pact has been published after a pact has been verified" do
            before do
              td.create_pact_with_verification("Foo", "1", "Bar", "2")
                .create_pact_with_hierarchy("Foo", "2", "Bar")
            end
  
            it "puts the unverified pact before the verification" do
              expect(subject.first.consumer_version_number).to eq "2"
              expect(subject.last.consumer_version_number).to eq "1"
            end
          end
        end
      end
    end
  end
  