Skip to content

Commit 6d18188

Browse files
committed
chore: add tests for PlayoutRundownModelImpl
1 parent 1917daa commit 6d18188

File tree

4 files changed

+360
-21
lines changed

4 files changed

+360
-21
lines changed

packages/job-worker/src/ingest/commit.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -729,16 +729,6 @@ async function removeSegments(
729729

730730
async function validateScratchpad(_context: JobContext, playoutModel: PlayoutModel) {
731731
for (const rundown of playoutModel.rundowns) {
732-
const scratchpadSegment = rundown.getScratchpadSegment()
733-
734-
if (scratchpadSegment) {
735-
// Ensure the _rank is just before the real content
736-
const otherSegmentsInRundown = rundown.segments.filter(
737-
(s) => s.segment.orphaned !== SegmentOrphanedReason.SCRATCHPAD
738-
)
739-
const minNormalRank = Math.min(0, ...otherSegmentsInRundown.map((s) => s.segment._rank))
740-
741-
rundown.setScratchpadSegmentRank(minNormalRank - 1)
742-
}
732+
rundown.updateScratchpadSegmentRank()
743733
}
744734
}

packages/job-worker/src/playout/model/PlayoutRundownModel.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,7 @@ export interface PlayoutRundownModel {
6363
*/
6464
getScratchpadSegment(): PlayoutSegmentModel | undefined
6565
/**
66-
* Set the rank of the Scratchpad Segment in this Rundown
67-
* Throws if the segment does not exists
68-
* @param rank New rank
66+
* Update the rank of the Scratchpad Segment in this Rundown, if it exists
6967
*/
70-
setScratchpadSegmentRank(rank: number): void
68+
updateScratchpadSegmentRank(): void
7169
}

packages/job-worker/src/playout/model/implementation/PlayoutRundownModelImpl.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,12 @@ export class PlayoutRundownModelImpl implements PlayoutRundownModel {
6767
const existingSegment = this.segments.find((s) => s.segment.orphaned === SegmentOrphanedReason.SCRATCHPAD)
6868
if (existingSegment) throw UserError.create(UserErrorMessage.ScratchpadAlreadyActive)
6969

70-
const minSegmentRank = Math.min(0, ...this.segments.map((s) => s.segment._rank))
71-
7270
const segmentId: SegmentId = getRandomId()
7371
this.#segments.unshift(
7472
new PlayoutSegmentModelImpl(
7573
{
7674
_id: segmentId,
77-
_rank: minSegmentRank - 1,
75+
_rank: calculateRankForScratchpadSegment(this.#segments),
7876
externalId: '__scratchpad__',
7977
externalModified: getCurrentTime(),
8078
rundownId: this.rundown._id,
@@ -105,13 +103,24 @@ export class PlayoutRundownModelImpl implements PlayoutRundownModel {
105103
return this.#segments.find((s) => s.segment.orphaned === SegmentOrphanedReason.SCRATCHPAD)
106104
}
107105

108-
setScratchpadSegmentRank(rank: number): void {
106+
updateScratchpadSegmentRank(): void {
109107
const segment = this.#segments.find((s) => s.segment.orphaned === SegmentOrphanedReason.SCRATCHPAD)
110-
if (!segment) throw new Error('Scratchpad segment does not exist!')
108+
if (!segment) return
111109

112-
segment.setScratchpadRank(rank)
110+
segment.setScratchpadRank(calculateRankForScratchpadSegment(this.#segments))
113111
this.#segments.sort((a, b) => a.segment._rank - b.segment._rank)
114112

115113
this.#scratchPadSegmentHasChanged = true
116114
}
117115
}
116+
117+
function calculateRankForScratchpadSegment(segments: readonly PlayoutSegmentModel[]) {
118+
// Ensure the _rank is just before the real content
119+
120+
return (
121+
Math.min(
122+
0,
123+
...segments.map((s) => (s.segment.orphaned === SegmentOrphanedReason.SCRATCHPAD ? 0 : s.segment._rank))
124+
) - 1
125+
)
126+
}

0 commit comments

Comments
 (0)