예제 #1
0
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
예제 #2
0
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']
예제 #3
0
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'
예제 #4
0
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'
예제 #5
0
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
예제 #6
0
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)