FEAT: Discovery Video Service Subscription
Build, Push and Deploy CMS / build-push-deploy (push) Successful in 2m35s
Build, Push and Deploy Discovery / build-push-deploy (push) Successful in 1m55s
Deploy Infrastructure / pulumi-up (push) Successful in 2s

This commit is contained in:
FahdShalhoub
2026-08-29 16:50:58 +03:00
parent 98950aba20
commit 6f9e04ee97
34 changed files with 1754 additions and 65 deletions
@@ -0,0 +1,40 @@
Feature: Building the catalogue from announcements
Discovery is the read side. It owns no ingestion of its own: it learns what
exists by subscribing to the catalogue topic cms announces ready videos on,
and keeps its own copy in its own database. Nothing polls cms and neither
service reads the other's tables.
A video therefore reaches the catalogue only once its transcode has finished
— which is the point, since a catalogue entry nobody can play is no use.
Background:
Given the CMS API is available
And the Discovery API is available
Scenario: A video the CMS announces appears in the catalogue
Given I have registered a video that is being transcoded
When MediaConvert reports that the job reached "COMPLETE"
Then the catalogue eventually holds that video
And the catalogue's copy carries its title, playback URL and categories
# The catalogue is built from announcements, and cms announces only what came
# out ready. A video part-way through its transcode is therefore genuinely
# absent rather than merely late, and saying so is the honest answer.
Scenario: A video that is still being transcoded is not in the catalogue
Given I have registered a video that is being transcoded
Then the catalogue does not hold that video
And the request is rejected with status 404
And the problem title is "Video Not In The Catalogue"
# The catalogue topic delivers at-least-once, and a job's outcome can be
# reported more than once, so the same video can be announced again. The
# later announcement is the truth: it lands on top of what is already there
# rather than colliding with it. Announcing it again with no playlist is what
# makes that visible — a second announcement carrying identical content is
# indistinguishable from never having arrived.
Scenario: A video announced again is updated rather than colliding
Given I have registered a video that is being transcoded
And MediaConvert reports that the job reached "COMPLETE"
And the catalogue eventually holds that video
When MediaConvert reports that the job reached "COMPLETE" without a playlist
Then the catalogue eventually holds that video with no playback URL
@@ -0,0 +1,43 @@
Feature: Announcing ready videos to the catalogue
A video is only worth showing once its transcode has finished. When
MediaConvert reports a job complete, cms announces that video on a queue of
its own — the seam the read side reads to build the public catalogue, so
nothing downstream has to poll cms or reach into its database.
The announcement is the published contract: the video's id, its title, the
URL a player can open, and the categories it is filed under, named rather
than numbered so a reader needs nothing from cms to make sense of it.
Background:
Given the CMS API is available
Scenario: A finished job announces the video to the catalogue
Given I have registered a video that is being transcoded
When MediaConvert reports that the job reached "COMPLETE"
Then the video eventually has status "ready"
And the catalogue is told about the video
And the announcement carries the video's title, playback URL and categories
# The catalogue is a list of things worth showing. A job that ended in an
# error produced nothing to play, so it is recorded against the video and
# goes no further.
Scenario Outline: A job that did not finish is not announced
Given I have registered a video that is being transcoded
When MediaConvert reports that the job reached "<state>"
Then the video eventually has status "failed"
And the catalogue is told nothing about the video
Examples:
| state |
| ERROR |
| CANCELED |
# A video can be filed under several categories, so the announcement carries
# all of them. Names, not the ids the register call took: what cms numbers
# them is its own business.
Scenario: The announcement lists every category the video is filed under
Given I have registered a video being transcoded under categories "documentary, news, podcast"
When MediaConvert reports that the job reached "COMPLETE"
Then the video eventually has status "ready"
And the catalogue is told about the video
And the announcement files it under "documentary, news, podcast"