Skip to content

Commit 39b23c8

Browse files
committed
GithubHelper#create_milestone: Add unit tests and validation to date order
1 parent 99a95ac commit 39b23c8

File tree

2 files changed

+64
-14
lines changed

2 files changed

+64
-14
lines changed

lib/fastlane/plugin/wpmreleasetoolkit/helper/github_helper.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,15 @@ def get_last_milestone(repository)
7575
#
7676
# @param [String] repository The repository name, including the organization (e.g. `wordpress-mobile/wordpress-ios`)
7777
# @param [String] title The name of the milestone we want to create (e.g.: `16.9`)
78-
# @param [Time] due_date milestone due date (e.g. `2022-10-22T12:00:00Z`)
79-
# @param [Integer] days_until_submission Number of days until submission
78+
# @param [Time] due_date Milestone due date—which will also correspond to the code freeze date
79+
# @param [Integer] days_until_submission Number of days from code freeze to submission to the App Store / Play Store
8080
# @param [Integer] days_until_release Number of days from code freeze to release
8181
#
8282
def create_milestone(repository:, title:, due_date:, days_until_submission:, days_until_release:)
83+
UI.user_error!('days_until_release must be greater than zero.') if days_until_release <= 0
84+
UI.user_error!('days_until_submission must be greater than zero.') if days_until_submission <= 0
85+
UI.user_error!('days_until_release must be greather than days_until_submission') if days_until_submission >= days_until_release
86+
8387
submission_date = due_date.to_datetime.next_day(days_until_submission)
8488
release_date = due_date.to_datetime.next_day(days_until_release)
8589
comment = <<~MILESTONE_DESCRIPTION

spec/github_helper_spec.rb

Lines changed: 58 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -217,31 +217,77 @@ def get_milestone(milestone_name:)
217217
allow(Octokit::Client).to receive(:new).and_return(client)
218218
end
219219

220-
it 'has the correct dates to code freeze without submission' do
221-
comment = "Code freeze: October 22, 2022\nApp Store submission: November 15, 2022\nRelease: October 25, 2022\n"
222-
options = { due_on: '2022-10-22T12:00:00Z', description: comment }
220+
it 'computes the correct dates for standard period' do
221+
due_date = '2022-10-20T08:00:00Z'.to_time.utc
222+
options = {
223+
due_on: '2022-10-20T12:00:00Z',
224+
description: "Code freeze: October 20, 2022\nApp Store submission: October 24, 2022\nRelease: October 27, 2022\n"
225+
}
223226

224227
expect(client).to receive(:create_milestone).with(test_repo, test_milestone_number, options)
225-
create_milestone(need_submission: false, milestone_duration: 24, days_code_freeze: 3)
228+
create_milestone(due_date: due_date, days_until_submission: 4, days_until_release: 7)
226229
end
227230

228-
it 'has the correct dates to code freeze with submission' do
229-
comment = "Code freeze: October 22, 2022\nApp Store submission: October 22, 2022\nRelease: October 25, 2022\n"
230-
options = { due_on: '2022-10-22T12:00:00Z', description: comment }
231+
it 'computes the correct dates when the due date is on the verge of a DST day change' do
232+
# The PST to PDT (DST) change is made on the second Sunday in March and finishes on the first Sunday in November
233+
Time.zone = 'Pacific Time (US & Canada)'
234+
due_date = '2022-06-18T23:00:00Z'.to_time
235+
options = {
236+
due_on: '2022-06-19T12:00:00Z',
237+
description: "Code freeze: June 19, 2022\nApp Store submission: June 21, 2022\nRelease: June 22, 2022\n"
238+
}
231239

232240
expect(client).to receive(:create_milestone).with(test_repo, test_milestone_number, options)
233-
create_milestone(need_submission: true, milestone_duration: 19, days_code_freeze: 3)
241+
create_milestone(due_date: due_date, days_until_submission: 2, days_until_release: 3)
234242
end
235243

236-
def create_milestone(need_submission:, milestone_duration:, days_code_freeze:)
237-
days_until_submission = need_submission ? (days_code_freeze - 3) : milestone_duration
244+
it 'computes the correct dates when the due date is on DST but has no day change' do
245+
# The PST to PDT (DST) change is made on the second Sunday in March and finishes on the first Sunday in November
246+
Time.zone = 'Pacific Time (US & Canada)'
247+
due_date = '2022-06-18T22:00:00Z'.to_time
248+
options = {
249+
due_on: '2022-06-18T12:00:00Z',
250+
description: "Code freeze: June 18, 2022\nApp Store submission: June 20, 2022\nRelease: June 21, 2022\n"
251+
}
252+
253+
expect(client).to receive(:create_milestone).with(test_repo, test_milestone_number, options)
254+
create_milestone(due_date: due_date, days_until_submission: 2, days_until_release: 3)
255+
end
256+
257+
context 'with input validation' do
258+
it 'raises an error if days_until_submission is less than or equal zero' do
259+
due_date = '2022-10-20T08:00:00Z'.to_time.utc
260+
expect { create_milestone(due_date: due_date, days_until_submission: 0, days_until_release: 5) }
261+
.to raise_error(FastlaneCore::Interface::FastlaneError, 'days_until_submission must be greater than zero.')
262+
end
263+
264+
it 'raises an error if days_until_release is less than or equal zero' do
265+
due_date = '2022-10-20T08:00:00Z'.to_time.utc
266+
expect { create_milestone(due_date: due_date, days_until_submission: 12, days_until_release: -8) }
267+
.to raise_error(FastlaneCore::Interface::FastlaneError, 'days_until_release must be greater than zero.')
268+
end
269+
270+
it 'raises an error if submission date is after the release date' do
271+
due_date = '2022-10-20T08:00:00Z'.to_time.utc
272+
expect { create_milestone(due_date: due_date, days_until_submission: 14, days_until_release: 3) }
273+
.to raise_error(FastlaneCore::Interface::FastlaneError, 'days_until_release must be greather than days_until_submission')
274+
end
275+
276+
it 'raises an error if submission date is equal to release date' do
277+
due_date = '2022-10-20T08:00:00Z'.to_time.utc
278+
expect { create_milestone(due_date: due_date, days_until_submission: 1, days_until_release: 1) }
279+
.to raise_error(FastlaneCore::Interface::FastlaneError, 'days_until_release must be greather than days_until_submission')
280+
end
281+
end
282+
283+
def create_milestone(due_date:, days_until_submission:, days_until_release:)
238284
helper = described_class.new(github_token: 'Fake-GitHubToken-123')
239285
helper.create_milestone(
240286
repository: test_repo,
241287
title: test_milestone_number,
242-
due_date: test_milestone_duedate.to_time.utc,
288+
due_date: due_date,
243289
days_until_submission: days_until_submission,
244-
days_until_release: days_code_freeze
290+
days_until_release: days_until_release
245291
)
246292
end
247293
end

0 commit comments

Comments
 (0)