require_relative '../lib/task' describe Task do context "Task#new" do context "When task already includes pomodori" do subject { Task.new(1, "Write Task spec (#pomo: 3/5)")} specify { expect(subject.pomodori).to eq(3) } specify { expect(subject.planned).to eq(5) } specify { expect(subject.text).to eq("Write Task spec") } specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 3/5)") } end context "When task does not include pomodori" do subject { Task.new(1, "Write Task spec")} specify { expect(subject.pomodori).to eq(0) } specify { expect(subject.planned).to eq(0) } specify { expect(subject.text).to eq("Write Task spec") } specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 0/0)") } end end context "Task#add_pomo" do context "Prioritized task" do subject { Task.new(1, "(A) Write Task spec (#pomo: 3/5)")} specify { expect(subject.pomodori).to eq(3) } context "Adding pomo to a tagged task" do before { subject.add_pomo } specify { expect(subject.pomodori).to eq(4) } specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 4/5)") } specify { subject.add_pomo; expect(subject.to_s).to eq("Write Task spec (#pomo: 5/5)") } end end context "Already tagged task" do subject { Task.new(1, "Write Task spec (#pomo: 3/5)")} specify { expect(subject.pomodori).to eq(3) } context "Adding pomo to a tagged task" do before { subject.add_pomo } specify { expect(subject.pomodori).to eq(4) } specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 4/5)") } end end context "Normal task" do subject { Task.new(1, "Write Task spec")} specify { expect(subject.pomodori).to eq(0) } context "Adding pomo to a normal task" do before { subject.add_pomo } specify { expect(subject.pomodori).to eq(1) } specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 1/0)") } end end end context "Task#plan" do context "When task already includes pomodori" do subject { Task.new(1, "Write Task spec (#pomo: 3/5)")} before { subject.plan(10) } specify { expect(subject.pomodori).to eq(3) } specify { expect(subject.planned).to eq(10) } specify { expect(subject.text).to eq("Write Task spec") } specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 3/10)") } end context "When task does not include pomodori" do subject { Task.new(1, "Write Task spec")} before { subject.plan(10) } specify { expect(subject.pomodori).to eq(0) } specify { expect(subject.planned).to eq(10) } specify { expect(subject.text).to eq("Write Task spec") } specify { expect(subject.to_s).to eq("Write Task spec (#pomo: 0/10)") } end end context "Task#status" do subject { Task.new(1, "Write Task spec")} context "new task" do specify { expect(subject.status).to eq :new } end context "planned task" do before { subject.plan(10) } specify { expect(subject.status).to eq :planned } end context "in progress task" do before { subject.plan(10); subject.add_pomo } specify { expect(subject.status).to eq :in_progress } end context "completed task" do before { subject.plan(1); subject.add_pomo } specify { expect(subject.status).to eq :completed } end context "underestimated task" do before { subject.plan(1); 2.times { subject.add_pomo } } specify { expect(subject.status).to eq :underestimated } end end end