diff --git a/tests/mocked/test_databases.py b/tests/mocked/test_databases.py index cdff6e3b..3354a396 100644 --- a/tests/mocked/test_databases.py +++ b/tests/mocked/test_databases.py @@ -6,6 +6,72 @@ from pydo import Client +@responses.activate +def test_databases_add(mock_client: Client, mock_client_url): + """Mocks the databases add database operation.""" + + expected = {"db": {"name": "alpha"}} + + cluster_uuid = "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30" + + responses.add( + responses.POST, + f"{mock_client_url}/v2/databases/{cluster_uuid}/dbs", + json=expected, + status=201, + ) + + resp = mock_client.databases.add(cluster_uuid, {"name": "alpha"}) + + assert expected == resp + + +@responses.activate +def test_databases_add_connection_pool(mock_client: Client, mock_client_url): + """Mocks the databases add connection pool operation.""" + + expected = { + "pool": { + "user": "doadmin", + "name": "backend-pool", + "size": 10, + "db": "defaultdb", + "mode": "transaction", + "connection": { + "uri": "postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25061/backend-pool?sslmode=require", + "database": "backend-pool", + "host": "backend-do-user-19081923-0.db.ondigitalocean.com", + "port": 25061, + "user": "doadmin", + "password": "wv78n3zpz42xezdk", + "ssl": True, + }, + } + } + + cluster_uuid = "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30" + + responses.add( + responses.POST, + f"{mock_client_url}/v2/databases/{cluster_uuid}/pools", + json=expected, + status=201, + ) + + resp = mock_client.databases.add_connection_pool( + cluster_uuid, + { + "name": "backend-pool", + "mode": "transaction", + "size": 10, + "db": "defaultdb", + "user": "doadmin", + }, + ) + + assert expected == resp + + @responses.activate def test_databases_update_connection_pool(mock_client: Client, mock_client_url): """Mocks the databases update connection pool operation.""" @@ -28,6 +94,103 @@ def test_databases_update_connection_pool(mock_client: Client, mock_client_url): assert resp is None +@responses.activate +def test_databases_create_cluster(mock_client: Client, mock_client_url): + """Mocks the databases create cluster operation.""" + + expected = { + "database": { + "id": "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30", + "name": "backend-cluster", + "engine": "pg", + "version": "14", + "semantic_version": "14.5", + "connection": { + "uri": "postgres://doadmin:wv78n3zpz42xezdk@backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require", + "database": "", + "host": "backend-do-user-19081923-0.db.ondigitalocean.com", + "port": 25060, + "user": "doadmin", + "password": "wv78n3zpz42xezdk", + "ssl": True, + }, + "private_connection": { + "uri": "postgres://doadmin:wv78n3zpz42xezdk@private-backend-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require", + "database": "", + "host": "private-backend-do-user-19081923-0.db.ondigitalocean.com", + "port": 25060, + "user": "doadmin", + "password": "wv78n3zpz42xezdk", + "ssl": True, + }, + "users": [ + {"name": "doadmin", "role": "primary", "password": "wv78n3zpz42xezdk"} + ], + "db_names": ["defaultdb"], + "num_nodes": 3, + "region": "nyc3", + "status": "creating", + "created_at": "2019-01-11T18:37:36Z", + "maintenance_window": { + "day": "saturday", + "hour": "08:45:12", + "pending": True, + "description": [ + "Update TimescaleDB to version 1.2.1", + "Upgrade to PostgreSQL 11.2 and 10.7 bugfix releases", + ], + }, + "size": "db-s-2vcpu-4gb", + "tags": ["production"], + "private_network_uuid": "d455e75d-4858-4eec-8c95-da2f0a5f93a7", + "version_end_of_life": "2023-11-09T00:00:00Z", + "version_end_of_availability": "2023-05-09T00:00:00Z", + } + } + + responses.add( + responses.POST, + f"{mock_client_url}/v2/databases", + json=expected, + status=201, + ) + + resp = mock_client.databases.create_cluster( + { + "name": "backend-cluster", + "engine": "pg", + "version": "14", + "region": "nyc3", + "size": "db-s-2vcpu-4gb", + "num_nodes": 3, + "tags": ["production"], + } + ) + + assert expected == resp + + +@responses.activate +def test_databases_add_user(mock_client: Client, mock_client_url): + """Mocks the databases add user operation.""" + + expected = { + "user": {"name": "app-01", "role": "normal", "password": "jge5lfxtzhx42iff"} + } + cluster_uuid = "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30" + + responses.add( + responses.POST, + f"{mock_client_url}/v2/databases/{cluster_uuid}/users", + json=expected, + status=201, + ) + + resp = mock_client.databases.add_user(cluster_uuid, {"name": "app-01"}) + + assert expected == resp + + @responses.activate def test_databases_update_major_version(mock_client: Client, mock_client_url): """Mocks the databases update major version.""" @@ -48,6 +211,54 @@ def test_databases_update_major_version(mock_client: Client, mock_client_url): assert resp is None +@responses.activate +def test_databases_create_replica(mock_client: Client, mock_client_url): + """Mocks the databases create replica operation.""" + + expected = { + "replica": { + "name": "read-nyc3-01", + "connection": { + "uri": "", + "database": "defaultdb", + "host": "read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com", + "port": 25060, + "user": "doadmin", + "password": "wv78n3zpz42xezdk", + "ssl": True, + }, + "private_connection": { + "uri": "postgres://doadmin:wv78n3zpz42xezdk@private-read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com:25060/defaultdb?sslmode=require", + "database": "", + "host": "private-read-nyc3-01-do-user-19081923-0.db.ondigitalocean.com", + "port": 25060, + "user": "doadmin", + "password": "wv78n3zpz42xezdk", + "ssl": True, + }, + "region": "nyc3", + "status": "online", + "created_at": "2019-01-11T18:37:36Z", + } + } + + cluster_uuid = "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30" + + responses.add( + responses.POST, + f"{mock_client_url}/v2/databases/{cluster_uuid}/replicas", + json=expected, + status=201, + ) + + resp = mock_client.databases.create_replica( + cluster_uuid, + {"name": "read-nyc3-01", "region": "nyc3", "size": "db-s-2vcpu-4gb"}, + ) + + assert expected == resp + + @responses.activate def test_databases_promote_replica(mock_client: Client, mock_client_url): """Mocks the databases promote replica to primary cluster function.""" @@ -67,6 +278,7 @@ def test_databases_promote_replica(mock_client: Client, mock_client_url): @responses.activate +<<<<<<< HEAD def test_databases_get_user(mock_client: Client, mock_client_url): """Mocks the databases get user method.""" @@ -500,3 +712,96 @@ def test_databases_list_users(mock_client: Client, mock_client_url): resp = mock_client.databases.list_users(cluster_uuid) assert expected == resp +======= +def test_databases_delete(mock_client: Client, mock_client_url): + """Mocks the databases delete operation.""" + + cluster_uuid = "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30" + database_name = "alpha" + + responses.add( + responses.DELETE, + f"{mock_client_url}/v2/databases/{cluster_uuid}/dbs/{database_name}", + status=204, + ) + + resp = mock_client.databases.delete(cluster_uuid, database_name) + + assert resp is None + + +@responses.activate +def test_databases_delete_connection_pool(mock_client: Client, mock_client_url): + """Mocks the databases delete connection pool operation.""" + + cluster_uuid = "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30" + + pool_name = "backend-pool" + + responses.add( + responses.DELETE, + f"{mock_client_url}/v2/databases/{cluster_uuid}/pools/{pool_name}", + status=204, + ) + + resp = mock_client.databases.delete_connection_pool(cluster_uuid, pool_name) + + assert resp is None + + +@responses.activate +def test_databases_delete_online_migration(mock_client: Client, mock_client_url): + """Mocks the databases delete online migration operation.""" + + cluster_uuid = "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30" + + migration_id = "77b28fc8-19ff-11eb-8c9c-c68e24557488" + + responses.add( + responses.DELETE, + f"{mock_client_url}/v2/databases/{cluster_uuid}/online-migration/{migration_id}", + status=204, + ) + + resp = mock_client.databases.delete_online_migration(cluster_uuid, migration_id) + + assert resp is None + + +@responses.activate +def test_databases_delete_user(mock_client: Client, mock_client_url): + """Mocks the databases delete user operation.""" + + cluster_uuid = "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30" + + user_name = "app-01" + + responses.add( + responses.DELETE, + f"{mock_client_url}/v2/databases/{cluster_uuid}/users/{user_name}", + status=204, + ) + + resp = mock_client.databases.delete_user(cluster_uuid, user_name) + + assert resp is None + + +@responses.activate +def test_databases_destroy_replica(mock_client: Client, mock_client_url): + """Mocks the databases destroy replica operation that destroy a read only replica.""" + + cluster_uuid = "9cc10173-e9ea-4176-9dbc-a4cee4c4ff30" + + replica_name = "read_nyc_3" + + responses.add( + responses.DELETE, + f"{mock_client_url}/v2/databases/{cluster_uuid}/replicas/{replica_name}", + status=204, + ) + + resp = mock_client.databases.destroy_replica(cluster_uuid, replica_name) + + assert resp is None +>>>>>>> e83536b8fadeafc89659d7c9da3f6fb0cf4e0a04