require 'spec_helper'

describe SportsDataApi::Ncaafb::PlayByPlay, vcr: {
    cassette_name: 'sports_data_api_ncaafb_play_by_play',
    record: :new_episodes,
    match_requests_on: [:host, :path]
} do

  let(:play_by_play) do
    SportsDataApi.set_key(:ncaafb, api_key(:ncaafb))
    SportsDataApi.set_access_level(:ncaafb, 't')
    SportsDataApi::Ncaafb.play_by_play(2014, :REG, 10, 'IOW', 'NW')
  end

  context 'results for play by play fetch' do
    subject { play_by_play }
    it { should be_an_instance_of(SportsDataApi::Ncaafb::PlayByPlay) }
    its(:id) { should eq 'f38cb305-28e8-446e-ac4a-c36fe7f823ea' }
    its(:scheduled) { should eq Time.new(2014, 11, 1, 16, 00, 00, '+00:00') }

    its(:home) { should eq 'IOW' }
    its(:away) { should eq 'NW' }
    its(:status) { should eq 'closed' }
    its(:home_team) { should be_an_instance_of(SportsDataApi::Ncaafb::Team) }
    its(:away_team) { should be_an_instance_of(SportsDataApi::Ncaafb::Team) }
  end

  context 'game quarters in play by play results' do
    subject {
      play_by_play.quarters.first
    }
    its(:number) { should eq 1 }
  end

  context 'pbp data in play by play results' do
    subject {
      play_by_play.quarters.first.play_by_plays.first
    }

    its(:class) {should eq(SportsDataApi::Ncaafb::Event)}
    its(:type) {should eq("event")}
    its(:sequence) {should eq(1)}
    its(:clock) {should eq("15:00")}
    its(:updated) {should eq("2014-11-01T16:01:56+00:00")}
    its(:summary) {should eq("IOW wins coin toss, elects to receive.")}
    its(:winner) {should eq({"team"=>"IOW", "outcome"=>"receive"})}
    its(:event_type) {should eq("cointoss")}
  end

  context 'pbp data in play by play results' do
    subject {
      play_by_play.quarters.first.play_by_plays.detect {|i| i.class == SportsDataApi::Ncaafb::Drive}
    }

    its(:class) {should eq(SportsDataApi::Ncaafb::Drive)}
    its(:type) {should eq("drive")}
    its(:id) {should eq("a211be88-0736-4951-ab87-fb4c09d2b265")}
    its(:clock) {should eq("15:00")}
    its(:team) {should eq("IOW")}
    its(:actions) {should be_any}
  end

  context 'play actions data in play by play results' do
    subject {
      play_by_play.quarters.first.play_by_plays.select {|i| i.class == SportsDataApi::Ncaafb::Drive}.flatten.map(&:actions).flatten.select {|a| a.sequence == 2}.first
    }

    its(:class) {should eq(SportsDataApi::Ncaafb::PlayAction)}
    its(:sequence) {should eq(2)}
    its(:clock) {should eq("15:00")}
    its(:id) {should eq "2e66a6cd-15a9-4d68-86da-9d518a3244c1" }
    its(:clock) {should eq("15:00")}
    its(:type) {should eq("play")}
    its(:summary) {should eq("8-J.Mitchell kicks 65 yards from NW 35. 10-J.Parker to NW 46 for 54 yards.")}
    its(:updated) {should eq("2014-11-01T16:07:10+00:00")}
    its(:side) {should eq("NW")}
    its(:yard_line) {should eq(35)}
    its(:down) {should eq(1)}
    its(:details) {should eq("/2014/REG/10/NW/IOW/plays/2e66a6cd-15a9-4d68-86da-9d518a3244c1.json")}
    its(:play_type) {should eq("kick")}
    its(:sequence) {should eq(2)}
    its(:yfd) {should eq(10)}
  end

  context 'event actions data in play by play results' do
    subject {
      play_by_play.quarters.first.play_by_plays.select {|i| i.class == SportsDataApi::Ncaafb::Drive}.flatten.map(&:actions).flatten.select {|a| a.sequence == 52}.first
    }

    its(:class) {should eq(SportsDataApi::Ncaafb::EventAction)}
    its(:clock) {should eq(":00")}
    its(:sequence) {should eq(52)}
    its(:id) {should eq "e6dda90f-426a-425f-9995-f793a9e54383" }
    its(:type) {should eq("event")}
    its(:summary) {should eq("End of Quarter")}
    its(:updated) {should eq("2014-11-01T16:43:17+00:00")}
    its(:event_type) {should eq("quarterend")}
  end
end