44from io import StringIO
55from unittest .mock import patch
66
7- from django .contrib .auth . models import User as UserType # pylint: disable=imported-auth-user
7+ from django .contrib .auth import get_user_model
88from django .core .management import call_command
99
1010from openedx_learning .apps .authoring .backup_restore .zipper import LearningPackageUnzipper , generate_staged_lp_key
1414from openedx_learning .lib .test_utils import TestCase
1515from test_utils .zip_file_utils import folder_to_inmemory_zip
1616
17+ User = get_user_model ()
1718
18- class RestoreLearningPackageCommandTest (TestCase ):
19- """Tests for the lp_load management command."""
19+
20+ class RestoreTestCase (TestCase ):
21+ """Base test case for restore tests."""
2022
2123 def setUp (self ):
2224 super ().setUp ()
2325 self .fixtures_folder = os .path .join (os .path .dirname (__file__ ), "fixtures/library_backup" )
2426 self .zip_file = folder_to_inmemory_zip (self .fixtures_folder )
2527 self .lp_key = "lib:WGU:LIB_C001"
26- self .user = UserType .objects .create_user (username = 'lp_user' , password = '12345' )
28+ self .user = User .objects .create_user (username = 'lp_user' , password = '12345' )
29+
30+
31+ class RestoreLearningPackageCommandTest (RestoreTestCase ):
32+ """Tests for the lp_load management command."""
2733
2834 @patch ("openedx_learning.apps.authoring.backup_restore.api.load_learning_package" )
2935 def test_restore_command (self , mock_load_learning_package ):
@@ -152,13 +158,12 @@ def verify_collections(self, lp):
152158 assert set (entity_keys ) == set (expected_entity_keys )
153159
154160
155- class RestoreLearningPackageTest (TestCase ):
161+ class RestoreLearningPackageTest (RestoreTestCase ):
156162 """Tests for restoring learning packages without using the management command."""
157163
158164 def test_successful_restore_with_no_command_line (self ):
159165 """Test restoring a learning package without using the management command."""
160- zip_file = folder_to_inmemory_zip (os .path .join (os .path .dirname (__file__ ), "fixtures/library_backup" ))
161- result = LearningPackageUnzipper (zip_file , key = "lib-xx:WGU:LIB_C001" ).load ()
166+ result = LearningPackageUnzipper (self .zip_file , key = "lib-xx:WGU:LIB_C001" ).load ()
162167
163168 expected = {
164169 "status" : "success" ,
@@ -179,7 +184,7 @@ def test_successful_restore_with_no_command_line(self):
179184 },
180185 "backup_metadata" : {
181186 "format_version" : 1 ,
182- "created_by" : "dormsbee " ,
187+ "created_by" : "lp_user " ,
183188 "created_at" : datetime (2025 , 10 , 5 , 18 , 23 , 45 , 180535 , tzinfo = timezone .utc ),
184189 "origin_server" : "cms.test" ,
185190 },
@@ -202,9 +207,7 @@ def test_successful_restore_with_no_command_line(self):
202207
203208 def test_successful_restore_with_staged_key (self ):
204209 """Test restoring a learning package with a staged key."""
205- user = UserType .objects .create_user (username = 'lp_user' , password = '12345' )
206- zip_file = folder_to_inmemory_zip (os .path .join (os .path .dirname (__file__ ), "fixtures/library_backup" ))
207- result = LearningPackageUnzipper (zip_file , user = user ).load ()
210+ result = LearningPackageUnzipper (self .zip_file , user = self .user ).load ()
208211
209212 assert result ["status" ] == "success"
210213 assert result ["lp_restored_data" ] is not None
@@ -254,7 +257,7 @@ def test_error_learning_package_missing_key(self):
254257 },
255258 "meta" : {
256259 "format_version" : 1 ,
257- "created_by" : "dormsbee " ,
260+ "created_by" : "lp_user " ,
258261 "created_at" : "2025-09-03T17:50:59.536190Z" ,
259262 "origin_server" : "cms.test" ,
260263 },
@@ -295,6 +298,23 @@ def test_error_no_metadata_section(self):
295298 expected_error = "Errors encountered during restore:\n package.toml meta section: {'non_field_errors': [Er"
296299 assert expected_error in log_content
297300
301+ def test_success_metadata_using_user_context (self ):
302+ """Test that metadata is correctly extracted from learning_package.toml."""
303+ restore_result = LearningPackageUnzipper (self .zip_file , user = self .user ).load ()
304+ metadata = restore_result .get ("backup_metadata" , {})
305+
306+ assert restore_result ["status" ] == "success"
307+
308+ expected_metadata = {
309+ "format_version" : 1 ,
310+ "created_by" : "lp_user" ,
311+ "created_by_email" : "lp_user@example.com" ,
312+ "created_at" : datetime (2025 , 10 , 5 , 18 , 23 , 45 , 180535 , tzinfo = timezone .utc ),
313+ "original_server" : "cms.test" ,
314+ }
315+
316+ assert metadata == expected_metadata
317+
298318
299319class RestoreUtilitiesTest (TestCase ):
300320 """Tests for utility functions used in the restore process."""
0 commit comments