def test_internal_error_metadata(sys):
    def fake_get_metadata_throw(oauth, get_endpoint, course_id, item_id):
        raise publish.InternalError()

    publish.get_metadata = fake_get_metadata_throw

    publish.command_publish(PublishParams)

    sys.exit.assert_called_with(publish.ErrorCodes.FATAL_ERROR)
def test_item_not_found_metadata(sys):
    def fake_get_token_throw(oauth, get_endpoint, authoring_pa_id):
        raise publish.ItemNotFoundError(PublishParams.authoring_pa_id)

    publish.get_authoring_pa_id = fake_get_authoring_pa_id
    publish.get_write_access_token = fake_get_token_throw

    publish.command_publish(PublishParams)

    sys.exit.assert_called_with(publish.ErrorCodes.FATAL_ERROR)
def test_called_with_write_access_token():
    publish.get_authoring_pa_id = fake_get_authoring_pa_id
    publish.get_write_access_token = fake_get_write_access_token
    publish.publish_item = MagicMock()

    publish.command_publish(PublishParams)

    publish.publish_item.assert_called_with(ANY, "fake-endpoint",
                                            "fake-action",
                                            "course2345~item3456", "token4567")
def test_item_not_found_publish(sys):
    def fake_publish_item(oauth, endpoint, action, authoring_pa_id, token):
        raise publish.ItemNotFoundError(PublishParams.authoring_pa_id)

    publish.get_write_access_token = fake_get_write_access_token
    publish.publish_item = fake_publish_item

    publish.command_publish(PublishParams)

    sys.exit.assert_called_with(publish.ErrorCodes.FATAL_ERROR)
def test_internal_error_publish(sys):
    def fake_publish_item(oauth, endpoint, action, course, item, metadata):
        raise publish.InternalError()

    publish.get_metadata = fake_get_metadata
    publish.publish_item = fake_publish_item

    publish.command_publish(PublishParams)

    sys.exit.assert_called_with(publish.ErrorCodes.FATAL_ERROR)
def test_missing_executor(sys):
    def fake_publish_item(oauth, endpoint, action, course, item, metadata):
        raise publish.GraderExecutorError(
            status=publish.GraderExecutorStatus.MISSING)

    publish.get_metadata = fake_get_metadata
    publish.publish_item = fake_publish_item

    publish.command_publish(PublishParams)
    sys.exit.assert_called_with(publish.ErrorCodes.FATAL_ERROR)
def test_item_not_found_metadata(sys):
    def fake_get_metadata_throw(oauth, get_endpoint, course_id, item_id):
        raise publish.ItemNotFoundError(
            PublishParams.course, PublishParams.item)

    publish.get_metadata = fake_get_metadata_throw

    publish.command_publish(PublishParams)

    sys.exit.assert_called_with(publish.ErrorCodes.FATAL_ERROR)
def test_assignment_not_ready_publish(sys):
    def fake_publish_item(oauth, endpoint, action, authoring_pa_id, token):
        raise publish.ProgrammingAssignmentDraftNotReadyError(
            PublishParams.authoring_pa_id)

    publish.get_write_access_token = fake_get_write_access_token
    publish.publish_item = fake_publish_item

    publish.command_publish(PublishParams)

    sys.exit.assert_called_with(publish.ErrorCodes.FATAL_ERROR)
def test_internal_error_publish(sys):
    def fake_publish_item(oauth, endpoint, action, authoring_pa_id, token):
        raise publish.InternalError()

    publish.get_authoring_pa_id = fake_get_authoring_pa_id
    publish.get_write_access_token = fake_get_write_access_token
    publish.publish_item = fake_publish_item

    publish.command_publish(PublishParams)

    sys.exit.assert_called_with(publish.ErrorCodes.FATAL_ERROR)
def test_missing_executor(sys):
    def fake_publish_item(oauth, endpoint, action, authoring_pa_id, token):
        raise publish.GraderExecutorError(
            status=publish.GraderExecutorStatus.MISSING)

    publish.get_authoring_pa_id = fake_get_authoring_pa_id
    publish.get_write_access_token = fake_get_write_access_token
    publish.publish_item = fake_publish_item

    publish.command_publish(PublishParams)
    sys.exit.assert_called_with(publish.ErrorCodes.FATAL_ERROR)
def test_item_not_found_publish(sys):
    def fake_publish_item(oauth, endpoint, action, course, item, metadata):
        raise publish.ItemNotFoundError(
            PublishParams.course, PublishParams.item)

    publish.get_metadata = fake_get_metadata
    publish.publish_item = fake_publish_item

    publish.command_publish(PublishParams)

    sys.exit.assert_called_with(publish.ErrorCodes.FATAL_ERROR)
def test_multiple_items():
    publish.get_metadata = fake_get_metadata
    publish.publish_item = MagicMock()

    PublishParams.additional_items = ['4567', '5678']
    publish.command_publish(PublishParams)
    PublishParams.additional_items = None

    publish.publish_item.assert_has_calls([
        call(
            ANY,
            "fake-endpoint",
            "fake-action",
            "2345",
            "3456",
            {
                "version": 0,
                "authorId": 1234,
                "publishedAssignmentId": 4321,
                "updatedAt": 10000000,
            }
        ),
        call(
            ANY,
            "fake-endpoint",
            "fake-action",
            "2345",
            "4567",
            {
                "version": 0,
                "authorId": 1234,
                "publishedAssignmentId": 4321,
                "updatedAt": 10000000,
            }
        ),
        call(
            ANY,
            "fake-endpoint",
            "fake-action",
            "2345",
            "5678",
            {
                "version": 0,
                "authorId": 1234,
                "publishedAssignmentId": 4321,
                "updatedAt": 10000000,
            }
        )
    ])
def test_multiple_items():
    publish.get_authoring_pa_id = fake_get_authoring_pa_id
    publish.get_write_access_token = fake_get_write_access_token
    publish.publish_item = MagicMock()

    PublishParams.additional_items = ['item4567', 'item5678']
    publish.command_publish(PublishParams)
    PublishParams.additional_items = None

    publish.publish_item.assert_has_calls([
        call(ANY, "fake-endpoint", "fake-action", "course2345~item3456",
             "token4567"),
        call(ANY, "fake-endpoint", "fake-action", "course2345~item4567",
             "token4567"),
        call(ANY, "fake-endpoint", "fake-action", "course2345~item5678",
             "token4567")
    ])
def test_called_with_metadata():
    publish.get_metadata = fake_get_metadata
    publish.publish_item = MagicMock()

    publish.command_publish(PublishParams)

    publish.publish_item.assert_called_with(
        ANY,
        "fake-endpoint",
        "fake-action",
        "2345",
        "3456",
        {
            "version": 0,
            "authorId": 1234,
            "publishedAssignmentId": 4321,
            "updatedAt": 10000000,
        }
    )