|
1 | 1 | # Copyright (C) Lutra Consulting Limited |
2 | 2 | # |
3 | 3 | # SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-MerginMaps-Commercial |
| 4 | + |
| 5 | +from . import DEFAULT_USER |
| 6 | +from .utils import ( |
| 7 | + add_user, |
| 8 | + logout, |
| 9 | + login_as_admin, |
| 10 | + create_workspace, |
| 11 | + create_project, |
| 12 | + upload_file_to_project, |
| 13 | +) |
| 14 | + |
| 15 | +from ..auth.models import User |
4 | 16 | import os |
5 | 17 | import shutil |
6 | 18 | from unittest.mock import patch |
@@ -156,6 +168,73 @@ def test_project_members(client): |
156 | 168 | assert response.status_code == 404 |
157 | 169 |
|
158 | 170 |
|
| 171 | +def test_get_project(client): |
| 172 | + """Test get project info endpoint""" |
| 173 | + admin = User.query.filter_by(username=DEFAULT_USER[0]).first() |
| 174 | + test_workspace = create_workspace() |
| 175 | + project = create_project("new_project", test_workspace, admin) |
| 176 | + logout(client) |
| 177 | + # lack of permissions |
| 178 | + response = client.get(f"v2/projects/{project.id}") |
| 179 | + assert response.status_code == 403 |
| 180 | + # access public project |
| 181 | + project.public = True |
| 182 | + db.session.commit() |
| 183 | + response = client.get(f"v2/projects/{project.id}") |
| 184 | + assert response.status_code == 200 |
| 185 | + assert response.json["public"] is True |
| 186 | + # project scheduled for deletion |
| 187 | + login_as_admin(client) |
| 188 | + project.public = False |
| 189 | + project.removed_at = datetime.utcnow() |
| 190 | + db.session.commit() |
| 191 | + response = client.get(f"v2/projects/{project.id}") |
| 192 | + assert response.status_code == 404 |
| 193 | + # success |
| 194 | + project.removed_at = None |
| 195 | + db.session.commit() |
| 196 | + response = client.get(f"v2/projects/{project.id}") |
| 197 | + assert response.status_code == 200 |
| 198 | + expected_keys = { |
| 199 | + "id", |
| 200 | + "name", |
| 201 | + "workspace", |
| 202 | + "role", |
| 203 | + "version", |
| 204 | + "created_at", |
| 205 | + "updated_at", |
| 206 | + "public", |
| 207 | + "size", |
| 208 | + } |
| 209 | + assert expected_keys == response.json.keys() |
| 210 | + # create new versions |
| 211 | + files = ["test.txt", "test3.txt", "test.qgs"] |
| 212 | + for file in files: |
| 213 | + upload_file_to_project(project, file, client) |
| 214 | + # project version does not exist |
| 215 | + response = client.get( |
| 216 | + f"v2/projects/{project.id}?files_at_version=v{project.latest_version+1}" |
| 217 | + ) |
| 218 | + assert response.status_code == 200 |
| 219 | + assert response.json["id"] == str(project.id) |
| 220 | + assert "files" not in response.json.keys() |
| 221 | + # files |
| 222 | + response = client.get( |
| 223 | + f"v2/projects/{project.id}?files_at_version=v{project.latest_version-2}" |
| 224 | + ) |
| 225 | + assert response.status_code == 200 |
| 226 | + assert len(response.json["files"]) == 1 |
| 227 | + assert any(resp_files["path"] == files[0] for resp_files in response.json["files"]) |
| 228 | + assert not any( |
| 229 | + resp_files["path"] == files[1] for resp_files in response.json["files"] |
| 230 | + ) |
| 231 | + response = client.get( |
| 232 | + f"v2/projects/{project.id}?files_at_version=v{project.latest_version}" |
| 233 | + ) |
| 234 | + assert len(response.json["files"]) == 3 |
| 235 | + assert {f["path"] for f in response.json["files"]} == set(files) |
| 236 | + |
| 237 | + |
159 | 238 | push_data = [ |
160 | 239 | # success |
161 | 240 | ( |
|
0 commit comments