diff --git a/src/ralph/models/edx/converters/xapi/video.py b/src/ralph/models/edx/converters/xapi/video.py index 822d97cd8..9ab305b17 100644 --- a/src/ralph/models/edx/converters/xapi/video.py +++ b/src/ralph/models/edx/converters/xapi/video.py @@ -10,6 +10,7 @@ ) from ralph.models.xapi.constants import LANG_EN_US_DISPLAY from ralph.models.xapi.video.constants import ( + VIDEO_EXTENSION_LENGTH, VIDEO_EXTENSION_TIME, VIDEO_EXTENSION_TIME_FROM, VIDEO_EXTENSION_TIME_TO, @@ -58,6 +59,20 @@ class UILoadVideoToVideoInitialized(VideoBaseXapiConverter): __src__ = UILoadVideo __dest__ = VideoInitialized + def _get_conversion_items(self): + """Returns a set of ConversionItems used for conversion.""" + + conversion_items = super()._get_conversion_items() + return conversion_items.union( + { + ConversionItem( + "context__extensions__" + VIDEO_EXTENSION_LENGTH, + None, + lambda _: 1, + ), + }, + ) + class UIPlayVideoToVideoPlayed(VideoBaseXapiConverter): """Converts a common edX `play_video` event to xAPI.""" diff --git a/src/ralph/models/xapi/video/fields/contexts.py b/src/ralph/models/xapi/video/fields/contexts.py index 4763982e3..6324dff0e 100644 --- a/src/ralph/models/xapi/video/fields/contexts.py +++ b/src/ralph/models/xapi/video/fields/contexts.py @@ -83,7 +83,7 @@ class VideoInitializedContextExtensionsField(VideoContextExtensionsField): consumed to trigger a completion. """ - length: float = Field(alias=VIDEO_EXTENSION_LENGTH, default_factory=float) + length: float = Field(alias=VIDEO_EXTENSION_LENGTH) ccSubtitleEnabled: Optional[bool] = Field(alias=VIDEO_EXTENSION_CC_SUBTITLE_ENABLED) ccSubtitleLanguage: Optional[str] = Field(alias=VIDEO_EXTENSION_CC_SUBTITLE_LANG) frameRate: Optional[float] = Field(alias=VIDEO_EXTENSION_FRAME_RATE) diff --git a/tests/fixtures/hypothesis_configuration.py b/tests/fixtures/hypothesis_configuration.py index 7a5ed787b..0ef784f3b 100644 --- a/tests/fixtures/hypothesis_configuration.py +++ b/tests/fixtures/hypothesis_configuration.py @@ -31,6 +31,7 @@ def custom_resolve_json(cls): settings.load_profile("development") st.register_type_strategy(str, st.text(min_size=1)) +st.register_type_strategy(float, st.floats(min_value=0.0)) st.register_type_strategy(StrictStr, st.text(min_size=1)) st.register_type_strategy(AnyUrl, provisional.urls()) st.register_type_strategy(AnyHttpUrl, provisional.urls())