def check_deposit(dep, expected_rn): """Check that a deposit has properly generated its report number.""" assert 'recid' in dep assert dep.report_number == expected_rn stored = record_project_resolver(str(dep['recid'])) \ if isinstance(dep, Project) \ else record_video_resolver(str(dep['recid'])) assert stored.report_number == expected_rn
def test_project_edit(app, project_published, users): """Test project edit.""" (project, video_1, video_2) = project_published assert project.status == 'published' assert video_1.status == 'published' assert video_2.status == 'published' # Edit project (change project title) new_project = project.edit() assert new_project.status == 'draft' new_project.update(title={'title': 'My project'}) # Edit videos inside project (change video titles) videos = [ deposit_video_resolver(record_video_resolver(id_)['_deposit']['id']) for id_ in new_project.video_ids ] login_user(User.query.get(users[0])) assert len(videos) == 2 for i, video in enumerate(videos): # video = Video.get_record(video.id) assert video['_deposit']['status'] == 'published' new_video = video.edit() assert new_video['_deposit']['status'] == 'draft' new_video.update(title={'title': 'Video {}'.format(i + 1)}) new_video.publish() # Publish all changes new_project.publish() # Check that everything is published videos = [record_video_resolver(id_) for id_ in new_project.video_ids] assert new_project['_deposit']['status'] == 'published' assert all(video['_deposit']['status'] == 'published' for video in videos) # Check that all titles where properly changed assert new_project['title']['title'] == 'My project' assert videos[0]['title']['title'] in ['Video 1', 'Video 2'] assert videos[1]['title']['title'] in ['Video 1', 'Video 2'] assert videos[0]['title']['title'] != videos[1]['title']['title']
def test_publish_all_videos(api_app, api_project): """Test video publish.""" (project, video_1, video_2) = api_project # check video1 is not published assert video_1['_deposit']['status'] == 'draft' assert video_2['_deposit']['status'] == 'draft' assert project['_deposit']['status'] == 'draft' # publish project prepare_videos_for_publish([video_1, video_2]) new_project = project.publish() # check project and all video are published assert new_project['_deposit']['status'] == 'published' videos = [record_video_resolver(id_) for id_ in new_project.video_ids] assert len(videos) == 2 for video in videos: assert video['_deposit']['status'] == 'published'
def test_publish_one_video(api_app, api_project): """Test video publish.""" (project, video_1, video_2) = api_project # check video1 is not published assert video_1['_deposit']['status'] == 'draft' assert video_2['_deposit']['status'] == 'draft' assert project['_deposit']['status'] == 'draft' # [publish project] prepare_videos_for_publish([video_1, video_2]) # publish one video video_1 = video_1.publish() project = video_1.project # publish the project (with one video still not publish) project = project.publish() # check project and all video are published assert project['_deposit']['status'] == 'published' videos = [record_video_resolver(id_) for id_ in project.video_ids] assert len(videos) == 2 for video in videos: assert video['_deposit']['status'] == 'published'
def test_video_publish_and_edit(api_project, users): """Test video publish and edit.""" (project, video_1, video_2) = api_project video_path_1 = project['videos'][0]['$ref'] video_path_2 = project['videos'][1]['$ref'] deposit_project_schema = ( 'https://cdslabs.cern.ch/schemas/' 'deposits/records/videos/project/project-v1.0.0.json') deposit_video_schema = ('https://cdslabs.cern.ch/schemas/' 'deposits/records/videos/video/video-v1.0.0.json') record_video_schema = ('https://cdslabs.cern.ch/schemas/' 'records/videos/video/video-v1.0.0.json') # check video1 is not published assert video_1['_deposit']['status'] == 'draft' assert video_2['_deposit']['status'] == 'draft' assert project['_deposit']['status'] == 'draft' # and the schema is a deposit assert video_1['$schema'] == deposit_video_schema assert video_2['$schema'] == deposit_video_schema assert project['$schema'] == deposit_project_schema # update video # [publish the video 1] login_user(User.query.get(users[0])) prepare_videos_for_publish([video_1]) video_1 = video_1.publish() project = video_1.project (_, record_video_1) = video_1.fetch_published() record_video_id_1 = record_video_1['recid'] record_path_1 = record_build_url(record_video_id_1) # check new link project -> video assert video_1['_deposit']['status'] == 'published' assert video_2['_deposit']['status'] == 'draft' assert project['_deposit']['status'] == 'draft' # check the schema is a record assert record_video_1['$schema'] == record_video_schema assert video_2['$schema'] == deposit_video_schema assert project['$schema'] == deposit_project_schema # check video recid is inside the list assert any(video_ref['$ref'] == record_path_1 for video_ref in project['videos']) is True # and there is not the old id (when the video was a deposit) assert any(video_ref['$ref'] == video_path_1 for video_ref in project['videos']) is False # and still exists video 2 deposit id assert any(video_ref['$ref'] == video_path_2 for video_ref in project['videos']) is True # [edit the video 1] video_1_v2 = record_video_resolver( record_video_1['_deposit']['pid']['value']) video_1_v2 = video_1_v2.edit() # check video1 is not published assert video_1_v2['_deposit']['status'] == 'draft' assert video_2['_deposit']['status'] == 'draft' assert project['_deposit']['status'] == 'draft' # check the schema is a record assert video_1_v2['$schema'] == deposit_video_schema assert video_2['$schema'] == deposit_video_schema assert project['$schema'] == deposit_project_schema # check video1 v1 recid is NOT inside the list assert any(video_ref['$ref'] == record_path_1 for video_ref in project['videos']) is False # check video1 v2 is inside the list video_path_1_v2 = video_build_url(video_1_v2['_deposit']['id']) assert any(video_ref['$ref'] == video_path_1_v2 for video_ref in project['videos']) is True
def record_video_resolver_sorted(ids): """Return videos with ascending RN order.""" return sorted([record_video_resolver(id_) for id_ in ids], key=lambda x: x.report_number)