Skip to content

Commit

Permalink
Fix lecture edit page if active term is not set (#683)
Browse files Browse the repository at this point in the history
* Add missing case that Term.active is nil

* Add unit tests for lecture#stale?

* Make lecture#older_than? method private

* Add cypress test for lecture edit page

* Make better use of .then()

Co-authored-by: Splines <37160523+Splines@users.noreply.github.com>

* Add docstring

* Remove obsolete line

* Rename for consistency

* Add missing punctuation to docstring

---------

Co-authored-by: Splines <37160523+Splines@users.noreply.github.com>
Co-authored-by: Splines <dominic-plein@gmx.de>
  • Loading branch information
3 people authored Aug 21, 2024
1 parent 0d39b9e commit 6d09e9e
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 6 deletions.
16 changes: 10 additions & 6 deletions app/models/lecture.rb
Original file line number Diff line number Diff line change
Expand Up @@ -830,12 +830,9 @@ def speakers
User.where(id: SpeakerTalkJoin.where(talk: talks).select(:speaker_id))
end

def older_than?(timespan)
return true unless term

term.begin_date <= Term.active.begin_date - timespan
end

# Determines if the lecture is stale (i.e. older than one year).
# The age of the lecture is determined by the begin date of the term
# in which it was given and the begin date of the current term.
def stale?
older_than?(1.year)
end
Expand Down Expand Up @@ -947,4 +944,11 @@ def only_one_lecture

errors.add(:course, :already_present)
end

def older_than?(timespan)
return false unless Term.active
return true unless term

term.begin_date <= Term.active.begin_date - timespan
end
end
1 change: 1 addition & 0 deletions app/views/lectures/edit/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
id="lecture-nav-content" type="button" role="tab"
href="#content"
data-bs-toggle="pill" data-bs-target="#lecture-pane-content"
data-cy="content-tab-btn"
aria-controls="lecture-pane-content" aria-selected="true">
<%= t('content') %>
</button>
Expand Down
15 changes: 15 additions & 0 deletions spec/cypress/e2e/lectures_spec.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import FactoryBot from "../support/factorybot";

describe("Lecture edit page", () => {
it("shows content tab button", function () {
cy.createUserAndLogin("teacher").then((teacher) => {
FactoryBot.create("lecture", "with_teacher_by_id",
{ teacher_id: teacher.id }).as("lecture");
});

cy.then(() => {
cy.visit(`/lectures/${this.lecture.id}/edit`);
cy.getBySelector("content-tab-btn").should("be.visible");
});
});
});
8 changes: 8 additions & 0 deletions spec/factories/terms.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,13 @@
trait :summer do
season { "SS" }
end

trait :winter do
season { "WS" }
end

trait :active do
active { true }
end
end
end
44 changes: 44 additions & 0 deletions spec/models/lecture_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,50 @@
end
end

describe "#stale?" do
context "when there is no active term" do
it "returns false" do
lecture = FactoryBot.build(:lecture)
expect(lecture.stale?).to be(false)
end
end

context "when there is an active term" do
let(:year) { 2024 }

before(:each) do
FactoryBot.create(:term, :summer, :active, year: year)
end

context "and there is no term associated with the lecture" do
it "returns true" do
lecture = FactoryBot.build(:lecture, :term_independent)
expect(lecture.stale?).to be(true)
end
end

context "and the lecture term begin date is before the active term" \
"begin date minus 1 year" do
let(:lecture_term) { FactoryBot.build(:term, :summer, year: year - 1) }

it "returns true" do
lecture = FactoryBot.build(:lecture, term: lecture_term)
expect(lecture.stale?).to be(true)
end
end

context "when the lecture term begin date is not older than the" \
"active term begin date minus 1 year" do
let(:lecture_term) { FactoryBot.build(:term, :winter, year: year - 1) }

it "returns false" do
lecture = FactoryBot.build(:lecture, term: lecture_term)
expect(lecture.stale?).to be(false)
end
end
end
end

# Test methods -- NEEDS TO BE REFACTORED

# describe '#tags' do
Expand Down

0 comments on commit 6d09e9e

Please sign in to comment.