# https://cybozudev.zendesk.com/hc/ja/articles/202331474-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E5%8F%96%E5%BE%97-GET-#step2
describe Kintone::Client do
  describe 'アプリ情報の取得(1件)' do
    let(:response) do
      {"records"=>
        [{"record_id"=>{"type"=>"RECORD_NUMBER", "value"=>"1"},
          "created_time"=>{"type"=>"CREATED_TIME", "value"=>"2012-02-03T08:50:00Z"},
          "dropdown"=>{"type"=>"DROP_DOWN", "value"=>nil},
          "$revision"=>{"type"=>"__REVISION__", "value"=>"4"}},
         {"record_id"=>{"type"=>"RECORD_NUMBER", "value"=>"2"},
          "created_time"=>{"type"=>"CREATED_TIME", "value"=>"2012-02-03T09:22:00Z"},
          "dropdown"=>{"type"=>"DROP_DOWN", "value"=>nil},
          "$revision"=>{"type"=>"__REVISION__", "value"=>"4"}}]}
    end

    let(:parsed_response) do
      {"records"=>
        [{"record_id"=>"1",
          "created_time"=>"2012-02-03T08:50:00Z",
          "dropdown"=>nil,
          "$revision"=>"4"},
         {"record_id"=>"2",
          "created_time"=>"2012-02-03T09:22:00Z",
          "dropdown"=>nil,
          "$revision"=>"4"}]}
    end

    context 'when there is result' do
      it do
        client = kintone_client do |stub|
          stub.get('/k/v1/record.json') do |env|
            expect(params_from_url(env)).to eq({
              "app"=>["8"],
              "fields[0]"=>["record_id"],
              "fields[1]"=>["created_time"],
              "fields[2]"=>["dropdown"],
              "query"=>["updated_time > \"2012-02-03T09:00:00+0900\" and updated_time < \"2012-02-03T10:00:00+0900\" order by record_id asc limit 10 offset 20"]
            })

            expect(env[:request_headers]['X-Cybozu-Authorization']).to eq TEST_AUTH_HEADER
            [200, {'Content-Type' => 'json'}, JSON.dump(response)]
          end
        end

        result = client.record.get(
          app: 8,
          query: 'updated_time > "2012-02-03T09:00:00+0900" and updated_time < "2012-02-03T10:00:00+0900" order by record_id asc limit 10 offset 20',
          fields: ["record_id", "created_time", "dropdown"]
        )

        expect(result).to eq parsed_response
      end
    end

    context 'when with totalCount' do
      before do
        response['totalCount'] = '1'
        parsed_response['totalCount'] = 1
      end

      it do
        client = kintone_client do |stub|
          stub.get('/k/v1/record.json') do |env|
            expect(params_from_url(env)).to eq({
              "app"=>["8"],
              "fields[0]"=>["record_id"],
              "fields[1]"=>["created_time"],
              "fields[2]"=>["dropdown"],
              "query"=>["updated_time > \"2012-02-03T09:00:00+0900\" and updated_time < \"2012-02-03T10:00:00+0900\" order by record_id asc limit 10 offset 20"],
              "totalCount"=>["true"]
            })

            expect(env[:request_headers]['X-Cybozu-Authorization']).to eq TEST_AUTH_HEADER
            [200, {'Content-Type' => 'json'}, JSON.dump(response)]
          end
        end

        result = client.record.get(
          app: 8,
          query: 'updated_time > "2012-02-03T09:00:00+0900" and updated_time < "2012-02-03T10:00:00+0900" order by record_id asc limit 10 offset 20',
          fields: ["record_id", "created_time", "dropdown"],
          totalCount: true
        )

        expect(result).to eq parsed_response
      end
    end
  end
end