コード例 #1
0
def test_put_database_update_error(monkeypatch, _clean_specs_table):
    """
    GIVEN body and spec id
    WHEN put is called with the body and spec id
    THEN the spec is stored against the spec id.
    """
    mock_request = mock.MagicMock()
    mock_headers = {"X-LANGUAGE": "JSON"}
    mock_request.headers = mock_headers
    monkeypatch.setattr(server.Request, "request", mock_request)
    version = "1"
    spec = {
        "info": {
            "version": version
        },
        "components": {
            "schemas": {
                "Schema": {
                    "type": "object",
                    "x-tablename": "schema",
                    "properties": {
                        "id": {
                            "type": "integer"
                        }
                    },
                }
            }
        },
    }
    body = json.dumps(spec)
    spec_name = "id 1"
    user = "******"
    mock_database_create_update_spec = mock.MagicMock()
    mock_database_create_update_spec.side_effect = package_database.exceptions.BaseError
    monkeypatch.setattr(
        package_database.get(),
        "create_update_spec",
        mock_database_create_update_spec,
    )

    response = versions.put(body=body.encode(),
                            spec_name=spec_name,
                            version=version,
                            user=user)

    spec_str = storage.get_storage_facade().get_spec(user=user,
                                                     name=spec_name,
                                                     version=version)
    assert f'"{version}"' in spec_str
    assert '"Schema"' in spec_str
    assert '"x-tablename"' in spec_str
    assert '"schema"' in spec_str
    assert package_database.get().count_customer_models(sub=user) == 0
    assert response.status_code == 500
    assert response.mimetype == "text/plain"
    assert "database" in response.data.decode()
コード例 #2
0
def test_put_database_count_error(monkeypatch, _clean_specs_table):
    """
    GIVEN body with invalid spec and spec id and database that raises DatabaseError
    WHEN put is called with the body and spec id
    THEN a 500 is returned.
    """
    mock_request = mock.MagicMock()
    mock_headers = {"X-LANGUAGE": "JSON"}
    mock_request.headers = mock_headers
    monkeypatch.setattr(server.Request, "request", mock_request)
    version = "1"
    schemas = {
        "Schema": {
            "type": "object",
            "x-tablename": "schema",
            "properties": {
                "id": {
                    "type": "integer"
                }
            },
        }
    }
    body = json.dumps({
        "info": {
            "version": version
        },
        "components": {
            "schemas": schemas
        }
    })
    spec_name = "id 1"
    user = "******"
    mock_database_count_customer_models = mock.MagicMock()
    mock_database_count_customer_models.side_effect = (
        package_database.exceptions.BaseError)
    monkeypatch.setattr(
        package_database.get(),
        "count_customer_models",
        mock_database_count_customer_models,
    )

    response = versions.put(body=body.encode(),
                            spec_name=spec_name,
                            version=version,
                            user=user)

    assert response.status_code == 500
    assert response.mimetype == "text/plain"
    assert "database" in response.data.decode()
コード例 #3
0
def test_put_storage_error(monkeypatch, _clean_specs_table):
    """
    GIVEN body with invalid spec and spec id
    WHEN put is called with the body and spec id
    THEN a 400 with an invalid spec is returned.
    """
    mock_request = mock.MagicMock()
    mock_headers = {"X-LANGUAGE": "JSON"}
    mock_request.headers = mock_headers
    monkeypatch.setattr(server.Request, "request", mock_request)
    version = "1"
    schemas = {
        "Schema": {
            "type": "object",
            "x-tablename": "schema",
            "properties": {
                "id": {
                    "type": "integer"
                }
            },
        }
    }
    body = json.dumps({
        "info": {
            "version": version
        },
        "components": {
            "schemas": schemas
        }
    })
    spec_name = "id 1"
    user = "******"
    mock_storage_create_update_spec = mock.MagicMock()
    mock_storage_create_update_spec.side_effect = storage.exceptions.StorageError
    monkeypatch.setattr(
        storage.get_storage_facade(),
        "create_update_spec",
        mock_storage_create_update_spec,
    )

    response = versions.put(body=body.encode(),
                            spec_name=spec_name,
                            version=version,
                            user=user)

    assert response.status_code == 500
    assert response.mimetype == "text/plain"
    assert "storing" in response.data.decode()
コード例 #4
0
def test_put_too_many_models_error(monkeypatch, _clean_specs_table):
    """
    GIVEN body, spec id, version and user that already has too many models
    WHEN put is called with the body and spec id
    THEN a 402 with an invalid spec is returned.
    """
    mock_request = mock.MagicMock()
    mock_headers = {"X-LANGUAGE": "JSON"}
    mock_request.headers = mock_headers
    monkeypatch.setattr(server.Request, "request", mock_request)
    version = "1"
    schemas = {
        "Schema": {
            "type": "object",
            "x-tablename": "schema",
            "properties": {
                "id": {
                    "type": "integer"
                }
            },
        }
    }
    body = json.dumps({
        "info": {
            "version": version
        },
        "components": {
            "schemas": schemas
        }
    })
    spec_name_1 = "id 1"
    user = "******"
    package_database.get().create_update_spec(sub=user,
                                              name=spec_name_1,
                                              version="1",
                                              model_count=100)

    spec_name_2 = "id 2"
    response = versions.put(body=body.encode(),
                            spec_name=spec_name_2,
                            version=version,
                            user=user)

    assert response.status_code == 402
    assert response.mimetype == "text/plain"
    assert "exceeded" in response.data.decode()
    assert ": 100," in response.data.decode()
    assert "spec: 1" in response.data.decode()
コード例 #5
0
def test_put_version_mismatch_error(monkeypatch):
    """
    GIVEN body, spec id, user and version different to that in the body
    WHEN put is called with the body, spec id, user and version
    THEN a 400 with an invalid spec is returned.
    """
    mock_request = mock.MagicMock()
    mock_headers = {"X-LANGUAGE": "JSON"}
    mock_request.headers = mock_headers
    monkeypatch.setattr(server.Request, "request", mock_request)
    version_1 = "1"
    schemas = {
        "Schema": {
            "type": "object",
            "x-tablename": "schema",
            "properties": {
                "id": {
                    "type": "integer"
                }
            },
        }
    }
    body = json.dumps({
        "info": {
            "version": version_1
        },
        "components": {
            "schemas": schemas
        }
    })
    spec_name = "id 1"
    user = "******"
    version_2 = "version 2"

    response = versions.put(body=body.encode(),
                            spec_name=spec_name,
                            version=version_2,
                            user=user)

    assert response.status_code == 400
    assert response.mimetype == "text/plain"
    assert version_1 in response.data.decode()
    assert version_2 in response.data.decode()
コード例 #6
0
def test_put_invalid_spec_error(monkeypatch):
    """
    GIVEN body with invalid spec, spec id, user and version
    WHEN put is called with the body, spec id, user and version
    THEN a 400 with an invalid spec is returned.
    """
    mock_request = mock.MagicMock()
    mock_headers = {"X-LANGUAGE": "JSON"}
    mock_request.headers = mock_headers
    monkeypatch.setattr(server.Request, "request", mock_request)
    body = "body 1"
    spec_name = "id 1"
    user = "******"
    version = "1"

    response = versions.put(body=body.encode(),
                            spec_name=spec_name,
                            version=version,
                            user=user)

    assert response.status_code == 400
    assert response.mimetype == "text/plain"
    assert "not valid" in response.data.decode()
コード例 #7
0
def test_put(monkeypatch, _clean_specs_table):
    """
    GIVEN body, spec id, user and version
    WHEN put is called with the body, spec id, user and version
    THEN the spec is stored against the spec id.
    """
    mock_request = mock.MagicMock()
    mock_headers = {"X-LANGUAGE": "JSON"}
    mock_request.headers = mock_headers
    monkeypatch.setattr(server.Request, "request", mock_request)
    version = "1"
    title = "title 1"
    description = "description 1"
    spec = {
        "info": {
            "version": version,
            "title": title,
            "description": description
        },
        "components": {
            "schemas": {
                "Schema": {
                    "type": "object",
                    "x-tablename": "schema",
                    "properties": {
                        "id": {
                            "type": "integer"
                        }
                    },
                }
            }
        },
    }
    body = json.dumps(spec)
    spec_name = "id 1"
    user = "******"

    response = versions.put(body=body.encode(),
                            spec_name=spec_name,
                            version=version,
                            user=user)

    spec_str = storage.get_storage_facade().get_spec(user=user,
                                                     name=spec_name,
                                                     version=version)
    assert f'"{version}"' in spec_str
    assert '"Schema"' in spec_str
    assert '"x-tablename"' in spec_str
    assert '"schema"' in spec_str

    assert package_database.get().count_customer_models(sub=user) == 1
    spec_infos = package_database.get().list_specs(sub=user)
    assert len(spec_infos) == 1
    spec_info = spec_infos[0]
    assert spec_info["name"] == spec_name
    assert spec_info["id"] == spec_name
    assert spec_info["version"] == version
    assert spec_info["title"] == title
    assert spec_info["description"] == description
    assert spec_info["model_count"] == 1
    assert "updated_at" in spec_info

    assert response.status_code == 204