spec/calendars/broadcast_spec.rb in timeboss-1.0.1 vs spec/calendars/broadcast_spec.rb in timeboss-1.0.5

- old
+ new

@@ -1,794 +1,794 @@ module TimeBoss describe Calendars::Broadcast do let(:subject) { described_class.new } - context 'days' do - it 'can get today' do + context "days" do + it "can get today" do day = subject.today expect(day).to be_instance_of(TimeBoss::Calendar::Day) expect(day.start_date).to eq Date.today end - it 'can get yesterday' do + it "can get yesterday" do day = subject.yesterday expect(day).to be_instance_of(TimeBoss::Calendar::Day) expect(day.start_date).to eq Date.yesterday end - it 'can get tomorrow' do + it "can get tomorrow" do day = subject.tomorrow expect(day).to be_instance_of(TimeBoss::Calendar::Day) expect(day.start_date).to eq Date.tomorrow end end - context 'quarters' do - describe '#quarter' do - it 'knows 2017Q2' do + context "quarters" do + describe "#quarter" do + it "knows 2017Q2" do quarter = subject.quarter(2017, 2) - expect(quarter.name).to eq '2017Q2' - expect(quarter.title).to eq 'Q2 2017' + expect(quarter.name).to eq "2017Q2" + expect(quarter.title).to eq "Q2 2017" expect(quarter.year_index).to eq 2017 expect(quarter.index).to eq 2 - expect(quarter.start_date).to eq Date.parse('2017-03-27') - expect(quarter.end_date).to eq Date.parse('2017-06-25') + expect(quarter.start_date).to eq Date.parse("2017-03-27") + expect(quarter.end_date).to eq Date.parse("2017-06-25") expect(quarter.to_range).to eq quarter.start_date..quarter.end_date end - it 'knows 2018Q3' do + it "knows 2018Q3" do quarter = subject.quarter(2018, 3) - expect(quarter.name).to eq '2018Q3' - expect(quarter.title).to eq 'Q3 2018' + expect(quarter.name).to eq "2018Q3" + expect(quarter.title).to eq "Q3 2018" expect(quarter.year_index).to eq 2018 expect(quarter.index).to eq 3 - expect(quarter.start_date).to eq Date.parse('2018-06-25') - expect(quarter.end_date).to eq Date.parse('2018-09-30') + expect(quarter.start_date).to eq Date.parse("2018-06-25") + expect(quarter.end_date).to eq Date.parse("2018-09-30") expect(quarter.to_range).to eq quarter.start_date..quarter.end_date end - it 'knows 2019Q4' do + it "knows 2019Q4" do quarter = subject.quarter(2019, 4) expect(quarter.year_index).to eq 2019 expect(quarter.index).to eq 4 - expect(quarter.name).to eq '2019Q4' - expect(quarter.title).to eq 'Q4 2019' - expect(quarter.start_date).to eq Date.parse('2019-09-30') - expect(quarter.end_date).to eq Date.parse('2019-12-29') + expect(quarter.name).to eq "2019Q4" + expect(quarter.title).to eq "Q4 2019" + expect(quarter.start_date).to eq Date.parse("2019-09-30") + expect(quarter.end_date).to eq Date.parse("2019-12-29") expect(quarter.to_range).to eq quarter.start_date..quarter.end_date end end - describe '#quarter_for' do - it 'knows what quarter 2018-06-27 is in' do - quarter = subject.quarter_for(Date.parse('2018-06-27')) - expect(quarter.name).to eq '2018Q3' + describe "#quarter_for" do + it "knows what quarter 2018-06-27 is in" do + quarter = subject.quarter_for(Date.parse("2018-06-27")) + expect(quarter.name).to eq "2018Q3" end - it 'knows what quarter 2018-06-22 is in' do - quarter = subject.quarter_for(Date.parse('2018-06-22')) - expect(quarter.name).to eq '2018Q2' + it "knows what quarter 2018-06-22 is in" do + quarter = subject.quarter_for(Date.parse("2018-06-22")) + expect(quarter.name).to eq "2018Q2" end end - describe '#quarters_for' do - it 'knows what quarters are in 2020' do + describe "#quarters_for" do + it "knows what quarters are in 2020" do basis = subject.year(2020) periods = subject.quarters_for(basis) expect(periods.map(&:name)).to eq %w[2020Q1 2020Q2 2020Q3 2020Q4] end - it 'knows what quarter 2018M7 is in' do + it "knows what quarter 2018M7 is in" do basis = subject.month(2018, 7) periods = subject.quarters_for(basis) expect(periods.map(&:name)).to eq %w[2018Q3] end end - describe '#this_quarter' do + describe "#this_quarter" do let(:today) { double } let(:quarter) { double } - it 'gets the quarter for today' do + it "gets the quarter for today" do allow(Date).to receive(:today).and_return today expect(subject).to receive(:quarter_for).with(today).and_return quarter expect(subject.this_quarter).to eq quarter end end - describe '#format' do + describe "#format" do let(:entry) { subject.quarter(2015, 3) } - it 'can do a default format' do - expect(entry.format).to eq '2015H2Q1' + it "can do a default format" do + expect(entry.format).to eq "2015H2Q1" end - it 'can format with only the quarter' do - expect(entry.format(:quarter)).to eq '2015Q3' + it "can format with only the quarter" do + expect(entry.format(:quarter)).to eq "2015Q3" end - it 'ignores stupidity' do - expect(entry.format(:day, :banana)).to eq '2015Q3' + it "ignores stupidity" do + expect(entry.format(:day, :banana)).to eq "2015Q3" end end - context 'relative' do + context "relative" do let(:this_quarter) { subject.quarter(2015, 3) } let(:quarter) { double } before(:each) { allow(subject).to receive(:this_quarter).and_return this_quarter } - it 'can get the last quarter' do + it "can get the last quarter" do allow(this_quarter).to receive(:previous).and_return quarter expect(subject.last_quarter).to eq quarter end - it 'can get the next quarter' do + it "can get the next quarter" do allow(this_quarter).to receive(:next).and_return quarter expect(subject.next_quarter).to eq quarter end - it 'can get some number of quarters' do + it "can get some number of quarters" do quarters = subject.quarters(5) expect(quarters.length).to eq 5 quarters.each { |q| expect(q).to be_a TimeBoss::Calendar::Quarter } - expect(quarters.map(&:name)).to eq ['2015Q3', '2015Q4', '2016Q1', '2016Q2', '2016Q3'] + expect(quarters.map(&:name)).to eq ["2015Q3", "2015Q4", "2016Q1", "2016Q2", "2016Q3"] end - it 'can get a quarter ahead' do + it "can get a quarter ahead" do quarter = subject.quarters_ahead(4) expect(quarter).to be_a TimeBoss::Calendar::Quarter - expect(quarter.name).to eq '2016Q3' + expect(quarter.name).to eq "2016Q3" end - it 'can get some number of quarters back' do + it "can get some number of quarters back" do quarters = subject.quarters_back(5) expect(quarters.length).to eq 5 quarters.each { |q| expect(q).to be_a TimeBoss::Calendar::Quarter } - expect(quarters.map(&:name)).to eq ['2014Q3', '2014Q4', '2015Q1', '2015Q2', '2015Q3'] + expect(quarters.map(&:name)).to eq ["2014Q3", "2014Q4", "2015Q1", "2015Q2", "2015Q3"] end - it 'can get a quarter ago' do + it "can get a quarter ago" do quarter = subject.quarters_ago(4) expect(quarter).to be_a TimeBoss::Calendar::Quarter - expect(quarter.name).to eq '2014Q3' + expect(quarter.name).to eq "2014Q3" end end end - context 'months' do - describe '#month' do - it 'knows 2017M2' do + context "months" do + describe "#month" do + it "knows 2017M2" do month = subject.month(2017, 2) - expect(month.name).to eq '2017M2' - expect(month.title).to eq 'February 2017' + expect(month.name).to eq "2017M2" + expect(month.title).to eq "February 2017" expect(month.year_index).to eq 2017 expect(month.index).to eq 2 - expect(month.start_date).to eq Date.parse('2017-01-30') - expect(month.end_date).to eq Date.parse('2017-02-26') + expect(month.start_date).to eq Date.parse("2017-01-30") + expect(month.end_date).to eq Date.parse("2017-02-26") expect(month.to_range).to eq month.start_date..month.end_date end - it 'knows 2018M3' do + it "knows 2018M3" do month = subject.month(2018, 3) - expect(month.name).to eq '2018M3' - expect(month.title).to eq 'March 2018' + expect(month.name).to eq "2018M3" + expect(month.title).to eq "March 2018" expect(month.year_index).to eq 2018 expect(month.index).to eq 3 - expect(month.start_date).to eq Date.parse('2018-02-26') - expect(month.end_date).to eq Date.parse('2018-03-25') + expect(month.start_date).to eq Date.parse("2018-02-26") + expect(month.end_date).to eq Date.parse("2018-03-25") expect(month.to_range).to eq month.start_date..month.end_date end - it 'knows 2019M11' do + it "knows 2019M11" do month = subject.month(2019, 11) expect(month.year_index).to eq 2019 expect(month.index).to eq 11 - expect(month.name).to eq '2019M11' - expect(month.title).to eq 'November 2019' - expect(month.start_date).to eq Date.parse('2019-10-28') - expect(month.end_date).to eq Date.parse('2019-11-24') + expect(month.name).to eq "2019M11" + expect(month.title).to eq "November 2019" + expect(month.start_date).to eq Date.parse("2019-10-28") + expect(month.end_date).to eq Date.parse("2019-11-24") expect(month.to_range).to eq month.start_date..month.end_date end end - describe '#month_for' do - it 'knows what month 2018-06-27 is in' do - month = subject.month_for(Date.parse('2018-06-27')) - expect(month.name).to eq '2018M7' + describe "#month_for" do + it "knows what month 2018-06-27 is in" do + month = subject.month_for(Date.parse("2018-06-27")) + expect(month.name).to eq "2018M7" end - it 'knows what month 2018-06-22 is in' do - month = subject.month_for(Date.parse('2018-06-22')) - expect(month.name).to eq '2018M6' + it "knows what month 2018-06-22 is in" do + month = subject.month_for(Date.parse("2018-06-22")) + expect(month.name).to eq "2018M6" end end - describe '#months_for' do - it 'knows what months are in 2020' do + describe "#months_for" do + it "knows what months are in 2020" do basis = subject.year(2020) periods = subject.months_for(basis) expect(periods.map(&:name)).to eq %w[2020M1 2020M2 2020M3 2020M4 2020M5 2020M6 2020M7 2020M8 2020M9 2020M10 2020M11 2020M12] end - it 'knows what months are in 2018Q2' do - basis = subject.parse('2018Q2') + it "knows what months are in 2018Q2" do + basis = subject.parse("2018Q2") periods = subject.months_for(basis) expect(periods.map(&:name)).to eq %w[2018M4 2018M5 2018M6] end - it 'knows what month 2019-12-12 is in' do - basis = subject.parse('2019-12-12') + it "knows what month 2019-12-12 is in" do + basis = subject.parse("2019-12-12") periods = subject.months_for(basis) expect(periods.map(&:name)).to eq %w[2019M12] end end - describe '#this_month' do + describe "#this_month" do let(:today) { double } let(:month) { double } - it 'gets the month for today' do + it "gets the month for today" do allow(Date).to receive(:today).and_return today expect(subject).to receive(:month_for).with(today).and_return month expect(subject.this_month).to eq month end end - describe '#format' do + describe "#format" do let(:entry) { subject.month(2015, 8) } - it 'can do a default format' do - expect(entry.format).to eq '2015H2Q1M2' + it "can do a default format" do + expect(entry.format).to eq "2015H2Q1M2" end - it 'can format with only the quarter' do - expect(entry.format(:quarter)).to eq '2015Q3M2' + it "can format with only the quarter" do + expect(entry.format(:quarter)).to eq "2015Q3M2" end - it 'ignores stupidity' do - expect(entry.format(:banana, :half, :week)).to eq '2015H2M2' + it "ignores stupidity" do + expect(entry.format(:banana, :half, :week)).to eq "2015H2M2" end end - context 'relative' do + context "relative" do let(:this_month) { subject.month(2015, 3) } let(:month) { double } before(:each) { allow(subject).to receive(:this_month).and_return this_month } - it 'can get the last month' do + it "can get the last month" do allow(this_month).to receive(:previous).and_return month expect(subject.last_month).to eq month end - it 'can get the next month' do + it "can get the next month" do allow(this_month).to receive(:next).and_return month expect(subject.next_month).to eq month end - it 'can get some number of months' do + it "can get some number of months" do months = subject.months(5) expect(months.length).to eq 5 months.each { |m| expect(m).to be_a TimeBoss::Calendar::Month } - expect(months.map(&:name)).to eq ['2015M3', '2015M4', '2015M5', '2015M6', '2015M7'] + expect(months.map(&:name)).to eq ["2015M3", "2015M4", "2015M5", "2015M6", "2015M7"] end - it 'can get a month ahead' do + it "can get a month ahead" do month = subject.months_ahead(4) expect(month).to be_a TimeBoss::Calendar::Month - expect(month.name).to eq '2015M7' + expect(month.name).to eq "2015M7" end - it 'can get some number of months back' do + it "can get some number of months back" do months = subject.months_back(5) expect(months.length).to eq 5 months.each { |m| expect(m).to be_a TimeBoss::Calendar::Month } - expect(months.map(&:name)).to eq ['2014M11', '2014M12', '2015M1', '2015M2', '2015M3'] + expect(months.map(&:name)).to eq ["2014M11", "2014M12", "2015M1", "2015M2", "2015M3"] end - it 'can get a month ago' do + it "can get a month ago" do month = subject.months_ago(4) expect(month).to be_a TimeBoss::Calendar::Month - expect(month.name).to eq '2014M11' + expect(month.name).to eq "2014M11" end end end - context 'weeks' do - before(:each) { allow(Date).to receive(:today).and_return Date.parse('2019-08-23') } + context "weeks" do + before(:each) { allow(Date).to receive(:today).and_return Date.parse("2019-08-23") } - it 'knows this week 'do - expect(subject.this_week.name).to eq '2019W34' - expect(subject.this_week.title).to eq 'Week of August 19, 2019' + it "knows this week " do + expect(subject.this_week.name).to eq "2019W34" + expect(subject.this_week.title).to eq "Week of August 19, 2019" end - it 'knows last week' do - expect(subject.last_week.name).to eq '2019W33' - expect(subject.last_week.title).to eq 'Week of August 12, 2019' + it "knows last week" do + expect(subject.last_week.name).to eq "2019W33" + expect(subject.last_week.title).to eq "Week of August 12, 2019" end - it 'knows next week' do - expect(subject.next_week.name).to eq '2019W35' - expect(subject.next_week.title).to eq 'Week of August 26, 2019' + it "knows next week" do + expect(subject.next_week.name).to eq "2019W35" + expect(subject.next_week.title).to eq "Week of August 26, 2019" end end - context 'years' do - describe '#year' do - it 'knows 2016' do + context "years" do + describe "#year" do + it "knows 2016" do year = subject.year(2016) - expect(year.name).to eq '2016' - expect(year.title).to eq '2016' + expect(year.name).to eq "2016" + expect(year.title).to eq "2016" expect(year.year_index).to eq 2016 expect(year.index).to eq 1 - expect(year.start_date).to eq Date.parse('2015-12-28') - expect(year.end_date).to eq Date.parse('2016-12-25') + expect(year.start_date).to eq Date.parse("2015-12-28") + expect(year.end_date).to eq Date.parse("2016-12-25") expect(year.to_range).to eq year.start_date..year.end_date end - it 'knows 2017' do + it "knows 2017" do year = subject.year(2017) - expect(year.name).to eq '2017' - expect(year.title).to eq '2017' + expect(year.name).to eq "2017" + expect(year.title).to eq "2017" expect(year.year_index).to eq 2017 expect(year.index).to eq 1 - expect(year.start_date).to eq Date.parse('2016-12-26') - expect(year.end_date).to eq Date.parse('2017-12-31') + expect(year.start_date).to eq Date.parse("2016-12-26") + expect(year.end_date).to eq Date.parse("2017-12-31") expect(year.to_range).to eq year.start_date..year.end_date end - it 'knows 2018' do + it "knows 2018" do year = subject.year(2018) - expect(year.name).to eq '2018' - expect(year.title).to eq '2018' + expect(year.name).to eq "2018" + expect(year.title).to eq "2018" expect(year.year_index).to eq 2018 expect(year.index).to eq 1 - expect(year.start_date).to eq Date.parse('2018-01-01') - expect(year.end_date).to eq Date.parse('2018-12-30') + expect(year.start_date).to eq Date.parse("2018-01-01") + expect(year.end_date).to eq Date.parse("2018-12-30") expect(year.to_range).to eq year.start_date..year.end_date end end - describe '#year_for' do - it 'knows what year 2018-04-07 is in' do - year = subject.year_for(Date.parse('2018-04-07')) - expect(year.name).to eq '2018' + describe "#year_for" do + it "knows what year 2018-04-07 is in" do + year = subject.year_for(Date.parse("2018-04-07")) + expect(year.name).to eq "2018" end - it 'knows what year 2016-12-27 is in' do - year = subject.year_for(Date.parse('2016-12-27')) - expect(year.name).to eq '2017' + it "knows what year 2016-12-27 is in" do + year = subject.year_for(Date.parse("2016-12-27")) + expect(year.name).to eq "2017" end end - describe '#years_for' do - it 'knows what years are in 2020 (duh)' do + describe "#years_for" do + it "knows what years are in 2020 (duh)" do basis = subject.year(2020) periods = subject.years_for(basis) expect(periods.map(&:name)).to eq %w[2020] end - it 'knows what year 2018Q2 is in' do - basis = subject.parse('2018Q2') + it "knows what year 2018Q2 is in" do + basis = subject.parse("2018Q2") periods = subject.years_for(basis) expect(periods.map(&:name)).to eq %w[2018] end - it 'knows what years 2019-12-12 is in' do - basis = subject.parse('2019-12-12') + it "knows what years 2019-12-12 is in" do + basis = subject.parse("2019-12-12") periods = subject.years_for(basis) expect(periods.map(&:name)).to eq %w[2019] end end - describe '#this_year' do + describe "#this_year" do let(:today) { double } let(:year) { double } - it 'gets the year for today' do + it "gets the year for today" do allow(Date).to receive(:today).and_return today expect(subject).to receive(:year_for).with(today).and_return year expect(subject.this_year).to eq year end end - describe '#format' do - let(:entry) { subject.parse('2020W24') } + describe "#format" do + let(:entry) { subject.parse("2020W24") } - it 'can do a default format' do - expect(entry.format).to eq '2020H1Q2M3W2' + it "can do a default format" do + expect(entry.format).to eq "2020H1Q2M3W2" end - it 'can format with only the quarter' do - expect(entry.format(:quarter)).to eq '2020Q2W11' + it "can format with only the quarter" do + expect(entry.format(:quarter)).to eq "2020Q2W11" end - it 'can format with only the quarter + month' do - expect(entry.format(:quarter, :month)).to eq '2020Q2M3W2' - expect(entry.format(:month, :quarter)).to eq '2020Q2M3W2' + it "can format with only the quarter + month" do + expect(entry.format(:quarter, :month)).to eq "2020Q2M3W2" + expect(entry.format(:month, :quarter)).to eq "2020Q2M3W2" end - it 'ignores stupidity' do - expect(entry.format(:day, :month, :banana)).to eq '2020M6W2' + it "ignores stupidity" do + expect(entry.format(:day, :month, :banana)).to eq "2020M6W2" end end - context 'relative' do + context "relative" do let(:this_year) { subject.year(2015) } let(:year) { double } before(:each) { allow(subject).to receive(:this_year).and_return this_year } - it 'can get the last year' do + it "can get the last year" do allow(this_year).to receive(:previous).and_return year expect(subject.last_year).to eq year end - it 'can get the next year' do + it "can get the next year" do allow(this_year).to receive(:next).and_return year expect(subject.next_year).to eq year end - it 'can get some number of years' do + it "can get some number of years" do years = subject.years(5) expect(years.length).to eq 5 years.each { |y| expect(y).to be_a TimeBoss::Calendar::Year } - expect(years.map(&:name)).to eq ['2015', '2016', '2017', '2018', '2019'] + expect(years.map(&:name)).to eq ["2015", "2016", "2017", "2018", "2019"] end - it 'can get some number of years back' do + it "can get some number of years back" do years = subject.years_back(5) expect(years.length).to eq 5 years.each { |y| expect(y).to be_a TimeBoss::Calendar::Year } - expect(years.map(&:name)).to eq ['2011', '2012', '2013', '2014', '2015'] + expect(years.map(&:name)).to eq ["2011", "2012", "2013", "2014", "2015"] end end end - describe '#parse' do - it 'can parse a year' do - date = subject.parse('2018') + describe "#parse" do + it "can parse a year" do + date = subject.parse("2018") expect(date).to be_a TimeBoss::Calendar::Year - expect(date.name).to eq '2018' + expect(date.name).to eq "2018" end - it 'can parse a quarter identifier' do - date = subject.parse('2017Q2') + it "can parse a quarter identifier" do + date = subject.parse("2017Q2") expect(date).to be_a TimeBoss::Calendar::Quarter - expect(date.name).to eq '2017Q2' + expect(date.name).to eq "2017Q2" end - it 'can parse a month identifier' do - date = subject.parse('2017M4') + it "can parse a month identifier" do + date = subject.parse("2017M4") expect(date).to be_a TimeBoss::Calendar::Month - expect(date.name).to eq '2017M4' + expect(date.name).to eq "2017M4" end - it 'can parse a week within a year' do - date = subject.parse('2018W37') + it "can parse a week within a year" do + date = subject.parse("2018W37") expect(date).to be_a TimeBoss::Calendar::Week - expect(date.name).to eq '2018W37' + expect(date.name).to eq "2018W37" end - it 'can parse a week within a quarter' do - date = subject.parse('2017Q2W2') + it "can parse a week within a quarter" do + date = subject.parse("2017Q2W2") expect(date).to be_a TimeBoss::Calendar::Week - expect(date.name).to eq '2017W15' + expect(date.name).to eq "2017W15" end - it 'can parse a week within a month' do - date = subject.parse('2017M4W1') + it "can parse a week within a month" do + date = subject.parse("2017M4W1") expect(date).to be_a TimeBoss::Calendar::Week - expect(date.name).to eq '2017W14' + expect(date.name).to eq "2017W14" end - it 'can parse a date' do - date = subject.parse('2017-04-08') + it "can parse a date" do + date = subject.parse("2017-04-08") expect(date).to be_a TimeBoss::Calendar::Day - expect(date.start_date).to eq Date.parse('2017-04-08') - expect(date.end_date).to eq Date.parse('2017-04-08') + expect(date.start_date).to eq Date.parse("2017-04-08") + expect(date.end_date).to eq Date.parse("2017-04-08") end - it 'can parse an aesthetically displeasing date' do - date = subject.parse('20170408') + it "can parse an aesthetically displeasing date" do + date = subject.parse("20170408") expect(date).to be_a TimeBoss::Calendar::Day - expect(date.start_date).to eq Date.parse('2017-04-08') - expect(date.end_date).to eq Date.parse('2017-04-08') + expect(date.start_date).to eq Date.parse("2017-04-08") + expect(date.end_date).to eq Date.parse("2017-04-08") end - it 'gives you nothing if you give it nothing' do + it "gives you nothing if you give it nothing" do expect(subject.parse(nil)).to be nil - expect(subject.parse('')).to be nil + expect(subject.parse("")).to be nil end end - context 'expressions' do - it 'can parse waypoints' do - result = subject.parse('this_year') + context "expressions" do + it "can parse waypoints" do + result = subject.parse("this_year") expect(result).to be_a TimeBoss::Calendar::Year expect(result).to be_current end - it 'can parse mathematic expressions' do - result = subject.parse('this_month + 2') + it "can parse mathematic expressions" do + result = subject.parse("this_month + 2") expect(result).to be_a TimeBoss::Calendar::Month expect(result).to eq subject.months_ahead(2) end - context 'ranges' do + context "ranges" do before(:each) { allow(subject).to receive(:this_year).and_return subject.year(2018) } - let(:result) { subject.parse('this_year-2 .. this_year') } + let(:result) { subject.parse("this_year-2 .. this_year") } - it 'can parse range expressions' do + it "can parse range expressions" do expect(result).to be_a TimeBoss::Calendar::Period expect(result.to_s).to eq "2016: 2015-12-28 thru 2016-12-25 .. 2018: 2018-01-01 thru 2018-12-30" end - it 'can get an overall start date for a range' do - expect(result.start_date).to eq Date.parse('2015-12-28') + it "can get an overall start date for a range" do + expect(result.start_date).to eq Date.parse("2015-12-28") end - it 'can get an overall end date for a range' do - expect(result.end_date).to eq Date.parse('2018-12-30') + it "can get an overall end date for a range" do + expect(result.end_date).to eq Date.parse("2018-12-30") end - context 'sub-periods' do - it 'can get the months included in a range' do + context "sub-periods" do + it "can get the months included in a range" do entries = result.months entries.each { |e| expect(e).to be_a TimeBoss::Calendar::Month } - expect(entries.map(&:name)).to include('2016M1', '2016M9', '2017M3', '2018M12') + expect(entries.map(&:name)).to include("2016M1", "2016M9", "2017M3", "2018M12") end - it 'can get the weeks included in a range' do + it "can get the weeks included in a range" do entries = result.weeks entries.each { |e| expect(e).to be_a TimeBoss::Calendar::Week } - expect(entries.map(&:name)).to include('2016W1', '2016W38', '2017W15', '2017W53', '2018W52') + expect(entries.map(&:name)).to include("2016W1", "2016W38", "2017W15", "2017W53", "2018W52") end - it 'can get the days included in a range' do + it "can get the days included in a range" do entries = result.days entries.each { |e| expect(e).to be_a TimeBoss::Calendar::Day } - expect(entries.map(&:name)).to include('2015-12-28', '2016-04-30', '2017-09-22', '2018-12-30') + expect(entries.map(&:name)).to include("2015-12-28", "2016-04-30", "2017-09-22", "2018-12-30") end end end end - context 'shifting' do - context 'from day' do - let(:basis) { subject.parse('2020-04-21') } + context "shifting" do + context "from day" do + let(:basis) { subject.parse("2020-04-21") } - it 'can shift to a different week' do - allow(subject).to receive(:this_week).and_return subject.parse('2020W23') + it "can shift to a different week" do + allow(subject).to receive(:this_week).and_return subject.parse("2020W23") result = basis.last_week expect(result).to be_a TimeBoss::Calendar::Day - expect(result.to_s).to eq '2020-05-26' + expect(result.to_s).to eq "2020-05-26" expect(basis.in_week).to eq 2 end - it 'can shift to a different quarter' do - allow(subject).to receive(:this_quarter).and_return subject.parse('2020Q3') + it "can shift to a different quarter" do + allow(subject).to receive(:this_quarter).and_return subject.parse("2020Q3") result = basis.quarters_ago(2) expect(result).to be_a TimeBoss::Calendar::Day - expect(result.to_s).to eq '2020-01-21' + expect(result.to_s).to eq "2020-01-21" expect(basis.in_quarter).to eq 23 end - it 'can shift to a different year' do - allow(subject).to receive(:this_year).and_return subject.parse('2019') + it "can shift to a different year" do + allow(subject).to receive(:this_year).and_return subject.parse("2019") result = basis.years_ahead(3) expect(result).to be_a TimeBoss::Calendar::Day - expect(result.to_s).to eq '2022-04-19' + expect(result.to_s).to eq "2022-04-19" expect(basis.in_year).to eq 114 end end - context 'from week' do - let(:basis) { subject.parse('2017W8') } + context "from week" do + let(:basis) { subject.parse("2017W8") } - it 'cannot shift to a different day' do + it "cannot shift to a different day" do expect(basis.last_day).to be nil expect(basis.in_day).to be nil end - it 'can shift to a different month' do - allow(subject).to receive(:this_month).and_return subject.parse('2020M4') + it "can shift to a different month" do + allow(subject).to receive(:this_month).and_return subject.parse("2020M4") result = basis.next_month expect(result).to be_a TimeBoss::Calendar::Week - expect(result.to_s).to eq '2020W20: 2020-05-11 thru 2020-05-17' + expect(result.to_s).to eq "2020W20: 2020-05-11 thru 2020-05-17" expect(basis.in_month).to eq 3 end - it 'can shift to a different half' do - allow(subject).to receive(:this_half).and_return subject.parse('2019H1') + it "can shift to a different half" do + allow(subject).to receive(:this_half).and_return subject.parse("2019H1") result = basis.last_half expect(result).to be_a TimeBoss::Calendar::Week - expect(result.to_s).to eq '2018W33: 2018-08-13 thru 2018-08-19' + expect(result.to_s).to eq "2018W33: 2018-08-13 thru 2018-08-19" expect(basis.in_half).to eq 8 end end - context 'from month' do - let(:basis) { subject.parse('2017M4') } + context "from month" do + let(:basis) { subject.parse("2017M4") } - it 'cannot shift to a different week' do + it "cannot shift to a different week" do expect(basis.last_week).to be nil expect(basis.in_week).to be nil end - it 'can shift to a different year' do - allow(subject).to receive(:this_year).and_return subject.parse('2020') + it "can shift to a different year" do + allow(subject).to receive(:this_year).and_return subject.parse("2020") result = basis.years_ahead(4) expect(result).to be_a TimeBoss::Calendar::Month - expect(result.name).to eq '2024M4' + expect(result.name).to eq "2024M4" expect(basis.in_year).to eq 4 end end - context 'from quarter' do - let(:basis) { subject.parse('2018Q2') } + context "from quarter" do + let(:basis) { subject.parse("2018Q2") } - it 'cannot shift to a different month' do + it "cannot shift to a different month" do expect(basis.months_ago(4)).to be nil expect(basis.in_month).to be nil end - it 'can shift to a different half' do - allow(subject).to receive(:this_half).and_return subject.parse('2020H1') + it "can shift to a different half" do + allow(subject).to receive(:this_half).and_return subject.parse("2020H1") result = basis.last_half expect(result).to be_a TimeBoss::Calendar::Quarter - expect(result.name).to eq '2019Q4' + expect(result.name).to eq "2019Q4" expect(basis.in_half).to eq 2 end end - context 'from year' do - let(:basis) { subject.parse('2014') } + context "from year" do + let(:basis) { subject.parse("2014") } - it 'cannot shift to a different half' do + it "cannot shift to a different half" do expect(basis.next_half).to be nil expect(basis.in_half).to be nil end - it 'shifts to a different year, but knows how useless that is' do - allow(subject).to receive(:this_year).and_return subject.parse('2020') + it "shifts to a different year, but knows how useless that is" do + allow(subject).to receive(:this_year).and_return subject.parse("2020") result = basis.years_ago(2) expect(result).to be_a TimeBoss::Calendar::Year - expect(result.name).to eq '2018' + expect(result.name).to eq "2018" expect(basis.in_year).to eq 1 end end end - context 'units' do + context "units" do let(:calendar) { described_class.new } - context 'day' do - let(:start_date) { Date.parse('2019-09-30') } + context "day" do + let(:start_date) { Date.parse("2019-09-30") } let(:subject) { TimeBoss::Calendar::Day.new(calendar, start_date) } - context 'links' do - it 'can get its previous' do - expect(subject.previous.name).to eq '2019-09-29' + context "links" do + it "can get its previous" do + expect(subject.previous.name).to eq "2019-09-29" end - it 'can get its next' do - expect(subject.next.name).to eq '2019-10-01' + it "can get its next" do + expect(subject.next.name).to eq "2019-10-01" end - it 'can offset backwards' do - expect(subject.offset(-3).name).to eq '2019-09-27' - expect((subject - 3).name).to eq '2019-09-27' + it "can offset backwards" do + expect(subject.offset(-3).name).to eq "2019-09-27" + expect((subject - 3).name).to eq "2019-09-27" end - it 'can offset forwards' do - expect(subject.offset(4).name).to eq '2019-10-04' - expect((subject + 4).name).to eq '2019-10-04' + it "can offset forwards" do + expect(subject.offset(4).name).to eq "2019-10-04" + expect((subject + 4).name).to eq "2019-10-04" end end end - context 'week' do - context 'links' do - context 'within year' do - let(:parent) { calendar.parse('2020') } + context "week" do + context "links" do + context "within year" do + let(:parent) { calendar.parse("2020") } let(:week) { parent.weeks.first } - it 'knows itself first' do - expect(week.to_s).to include('2020W1', '2019-12-30', '2020-01-05') + it "knows itself first" do + expect(week.to_s).to include("2020W1", "2019-12-30", "2020-01-05") end - it 'can get its next week' do + it "can get its next week" do subject = week.next expect(subject).to be_a TimeBoss::Calendar::Week - expect(subject.to_s).to include('2020W2', '2020-01-06', '2020-01-12') + expect(subject.to_s).to include("2020W2", "2020-01-06", "2020-01-12") end - it 'can get its previous week' do + it "can get its previous week" do subject = week.previous expect(subject).to be_a TimeBoss::Calendar::Week - expect(subject.to_s).to include('2019W52', '2019-12-23', '2019-12-29') + expect(subject.to_s).to include("2019W52", "2019-12-23", "2019-12-29") end - it 'can offset backwards' do - expect(week.offset(-4).name).to eq '2019W49' - expect((week - 4).name).to eq '2019W49' + it "can offset backwards" do + expect(week.offset(-4).name).to eq "2019W49" + expect((week - 4).name).to eq "2019W49" end - it 'can offset forwards' do - expect((week + 2).name).to eq '2020W3' + it "can offset forwards" do + expect((week + 2).name).to eq "2020W3" end end - context 'within quarter' do - let(:parent) { calendar.parse('2019Q3') } + context "within quarter" do + let(:parent) { calendar.parse("2019Q3") } let(:week) { parent.weeks.last } - it 'knows itself first' do - expect(week.to_s).to include('2019W39', '2019-09-23', '2019-09-29') + it "knows itself first" do + expect(week.to_s).to include("2019W39", "2019-09-23", "2019-09-29") end - it 'can get its next week' do + it "can get its next week" do subject = week.next expect(subject).to be_a TimeBoss::Calendar::Week - expect(subject.to_s).to include('2019W40', '2019-09-30', '2019-10-06') + expect(subject.to_s).to include("2019W40", "2019-09-30", "2019-10-06") end - it 'can get its previous week' do + it "can get its previous week" do subject = week.previous expect(subject).to be_a TimeBoss::Calendar::Week - expect(subject.to_s).to include('2019W38', '2019-09-16', '2019-09-22') + expect(subject.to_s).to include("2019W38", "2019-09-16", "2019-09-22") end - it 'can offset backwards' do - expect(week.offset(-4).name).to eq '2019W35' - expect((week - 4).name).to eq '2019W35' + it "can offset backwards" do + expect(week.offset(-4).name).to eq "2019W35" + expect((week - 4).name).to eq "2019W35" end - it 'can offset forwards' do - expect((week + 2).name).to eq '2019W41' + it "can offset forwards" do + expect((week + 2).name).to eq "2019W41" end end end end - context 'quarter' do - let(:start_date) { Date.parse('2019-09-30') } - let(:end_date) { Date.parse('2019-12-29') } + context "quarter" do + let(:start_date) { Date.parse("2019-09-30") } + let(:end_date) { Date.parse("2019-12-29") } let(:subject) { TimeBoss::Calendar::Quarter.new(calendar, 2019, 4, start_date, end_date) } - context 'links' do - it 'can get the next quarter' do + context "links" do + it "can get the next quarter" do quarter = subject.next - expect(quarter.to_s).to include('2020Q1', '2019-12-30', '2020-03-29') + expect(quarter.to_s).to include("2020Q1", "2019-12-30", "2020-03-29") end - it 'can get the next next quarter' do + it "can get the next next quarter" do quarter = subject.next.next - expect(quarter.to_s).to include('2020Q2', '2020-03-30', '2020-06-28') + expect(quarter.to_s).to include("2020Q2", "2020-03-30", "2020-06-28") end - it 'can get the next next previous quarter' do + it "can get the next next previous quarter" do quarter = subject.next.next.previous - expect(quarter.to_s).to include('2020Q1', '2019-12-30', '2020-03-29') + expect(quarter.to_s).to include("2020Q1", "2019-12-30", "2020-03-29") end - it 'can get the next previous quarter' do + it "can get the next previous quarter" do quarter = subject.next.previous expect(quarter.to_s).to eq subject.to_s end - it 'can get the previous quarter' do + it "can get the previous quarter" do quarter = subject.previous - expect(quarter.to_s).to include('2019Q3', '2019-07-01', '2019-09-29') + expect(quarter.to_s).to include("2019Q3", "2019-07-01", "2019-09-29") end - it 'can offset backwards' do - expect(subject.offset(-4).name).to eq '2018Q4' - expect((subject - 4).name).to eq '2018Q4' + it "can offset backwards" do + expect(subject.offset(-4).name).to eq "2018Q4" + expect((subject - 4).name).to eq "2018Q4" end - it 'can offset forwards' do - expect(subject.offset(2).name).to eq '2020Q2' - expect((subject + 2).name).to eq '2020Q2' + it "can offset forwards" do + expect(subject.offset(2).name).to eq "2020Q2" + expect((subject + 2).name).to eq "2020Q2" end end end end end