Skip to content

Commit

Permalink
Merge branch 'develop' of https://github.com/I-GUIDE/catalogapi into …
Browse files Browse the repository at this point in the history
…develop
  • Loading branch information
Maurier committed May 7, 2024
2 parents 89d5dd2 + d86f8e6 commit eb24f9a
Show file tree
Hide file tree
Showing 8 changed files with 98 additions and 20 deletions.
1 change: 0 additions & 1 deletion api/adapters/hydroshare.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,6 @@ def update_submission(submission: Submission, repo_record_id: str) -> Submission

submission.repository_identifier = repo_record_id
submission.repository = RepositoryType.HYDROSHARE
submission.type = SubmissionType.HYDROSHARE
return submission


Expand Down
1 change: 0 additions & 1 deletion api/adapters/s3.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ def update_submission(submission: Submission, repo_record_id: str) -> Submission

submission.repository_identifier = repo_record_id
submission.repository = RepositoryType.S3
submission.type = SubmissionType.S3
return submission


Expand Down
1 change: 0 additions & 1 deletion api/models/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ class Submission(Document):
submitted: datetime = datetime.utcnow()
url: HttpUrl = None
repository: Optional[str]
type: SubmissionType = SubmissionType.IGUIDE_FORM
repository_identifier: Optional[str]


Expand Down
8 changes: 4 additions & 4 deletions api/routes/catalog.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ def inject_repository_identifier(submission: Submission, document: DatasetMetada


def inject_submission_type(submission: Submission, document: DatasetMetadataDOC):
document.submission_type = submission.type
if submission.repository is None:
document.submission_type = SubmissionType.IGUIDE_FORM
else:
document.submission_type = submission.repository
return document


Expand All @@ -33,7 +36,6 @@ class S3Path(BaseModel):
async def create_dataset(document: DatasetMetadataDOC, user: Annotated[User, Depends(get_current_user)]):
await document.insert()
submission = document.as_submission()
submission.type = SubmissionType.IGUIDE_FORM
user.submissions.append(submission)
await user.save(link_rule=WriteRules.WRITE)
document = inject_submission_type(submission, document)
Expand Down Expand Up @@ -92,7 +94,6 @@ async def update_dataset(
updated_submission.repository_identifier = submission.repository_identifier
updated_submission.repository = submission.repository
updated_submission.submitted = submission.submitted
updated_submission.type = submission.type
await updated_submission.replace()
dataset = inject_repository_identifier(updated_submission, dataset)
dataset = inject_submission_type(updated_submission, dataset)
Expand Down Expand Up @@ -187,7 +188,6 @@ async def create_dataset(
submission = document.as_submission()
submission.repository_identifier = identifier
submission.repository = RepositoryType.S3
submission.type = SubmissionType.S3
user.submissions.append(submission)
await user.save(link_rule=WriteRules.WRITE)
document = inject_repository_identifier(submission, document)
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/submissions/cd.submissions.vue
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@

<!-- UPDATE -->
<v-btn
v-if="item.raw.type === 'HYDROSHARE'"
v-if="item.raw.repository === 'HYDROSHARE'"
:id="`sub-${index}-update`"
@click="onUpdate(item.raw)"
:disabled="
Expand Down
5 changes: 1 addition & 4 deletions frontend/src/models/submission.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ export default class Submission extends Model implements ISubmission {
public date!: number;
public identifier!: string;
public repoIdentifier?: string;
public type?: string;
public repository!: string;
public url!: string;
public id!: string;
Expand Down Expand Up @@ -49,7 +48,6 @@ export default class Submission extends Model implements ISubmission {
date: this.number(0),
identifier: this.attr(""),
repoIdentifier: this.attr(""),
type: this.attr(""),
repository: this.attr(""),
url: this.attr(""),
id: this.attr(""),
Expand All @@ -65,7 +63,6 @@ export default class Submission extends Model implements ISubmission {
identifier: dbSubmission.identifier, // TODO: we should call this something else. It is not the same as the schema's identifier
repository: dbSubmission.repository,
repoIdentifier: dbSubmission.repository_identifier,
type: dbSubmission.type,
url: dbSubmission.url,
id: dbSubmission._id,
};
Expand All @@ -81,7 +78,7 @@ export default class Submission extends Model implements ISubmission {
? apiSubmission.identifier[0]
: apiSubmission.identifier,
repoIdentifier: apiSubmission.url,
type: "HYDROSHARE",
repository: "HYDROSHARE", // HydroShare is currently the only supported repository
url: apiSubmission.url,
id: apiSubmission._id,
};
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/models/user.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ export default class User extends Model {
window.addEventListener("message", handleMessage, {
signal: this.controller.signal, // Used to remove the listener
});
console.info(`User: listening to login window...`);
console.info(`[User]: listening to login window...`);
}

static async checkAuthorization() {
Expand Down
98 changes: 91 additions & 7 deletions tests/test_dataset_routes.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import pytest

from api.adapters.utils import RepositoryType
from api.models.catalog import Submission
from api.models.user import SubmissionType, User

Expand Down Expand Up @@ -50,7 +51,6 @@ async def test_create_dataset(client_test, dataset_data, test_user_access_token)
assert user.submission(submission_id) is not None
assert user.submission(submission_id).repository is None
assert user.submission(submission_id).repository_identifier is None
assert user.submission(submission_id).type == SubmissionType.IGUIDE_FORM
# retrieve the record from the db
response = await client_test.get(f"api/catalog/dataset/{record_id}")
assert response.status_code == 200
Expand Down Expand Up @@ -207,6 +207,46 @@ async def test_get_datasets(client_test, dataset_data, multiple):
assert ds["submission_type"] == SubmissionType.IGUIDE_FORM


@pytest.mark.asyncio
async def test_get_datasets_different_submission_types(client_test, dataset_data):
"""Testing the get all datasets for a given user"""

# add a dataset record to the db simulation iGuide form submission
dataset_response = await client_test.post("api/catalog/dataset", json=dataset_data)
assert dataset_response.status_code == 201

# add a dataset record to the db simulation S3 submission
s3_path = {
"path": "data/.hs/dataset_metadata.json",
"bucket": "iguide-catalog",
"endpoint_url": "https://iguide-catalog.s3.us-west-2.amazonaws.com/",
}

payload = {
"s3_path": s3_path,
"document": dataset_data
}

dataset_response = await client_test.post("api/catalog/dataset/s3", json=payload)
assert dataset_response.status_code == 201
# add a dataset record to the db simulation HydroShare submission
hs_published_res_id = "b5f58460941c49578e311adb9823657a"
response = await client_test.get(f"api/catalog/repository/hydroshare/{hs_published_res_id}")
assert response.status_code == 200
hs_dataset = response.json()
assert hs_dataset['repository_identifier'] == hs_published_res_id
assert hs_dataset['submission_type'] == SubmissionType.HYDROSHARE

# retrieve all datasets
dataset_response = await client_test.get("api/catalog/dataset")
assert dataset_response.status_code == 200
dataset_response_data = dataset_response.json()
assert len(dataset_response_data) == 3
assert dataset_response_data[0]["submission_type"] == SubmissionType.IGUIDE_FORM
assert dataset_response_data[1]["submission_type"] == SubmissionType.S3
assert dataset_response_data[2]["submission_type"] == SubmissionType.HYDROSHARE


@pytest.mark.asyncio
async def test_get_datasets_exclude_none(client_test, dataset_data):
"""Testing exclude none is applied to dataset response model"""
Expand All @@ -231,8 +271,8 @@ async def test_get_datasets_exclude_none(client_test, dataset_data):

@pytest.mark.parametrize("multiple", [True, False])
@pytest.mark.asyncio
async def test_get_submissions(client_test, dataset_data, multiple):
"""Testing the get submissions route"""
async def test_get_submissions_1(client_test, dataset_data, multiple):
"""Testing the get submissions route with one submission type only"""

# add a dataset record to the db - this will also add a submission record
dataset_response = await client_test.post("api/catalog/dataset", json=dataset_data)
Expand All @@ -257,14 +297,59 @@ async def test_get_submissions(client_test, dataset_data, multiple):
assert submission_response_data[1]['identifier'] == dataset_response_data[1]['_id']
assert submission_response_data[0]['url'] == dataset_response_data[0]['url']
assert submission_response_data[1]['url'] == dataset_response_data[1]['url']
assert submission_response_data[0]['type'] == SubmissionType.IGUIDE_FORM
assert submission_response_data[1]['type'] == SubmissionType.IGUIDE_FORM
assert submission_response_data[0]['repository'] is None
assert submission_response_data[1]['repository'] is None
else:
assert len(submission_response_data) == 1
assert submission_response_data[0]['title'] == dataset_response_data['name']
assert submission_response_data[0]['identifier'] == dataset_response_data['_id']
assert submission_response_data[0]['url'] == dataset_response_data['url']
assert submission_response_data[0]['type'] == SubmissionType.IGUIDE_FORM
assert submission_response_data[0]['repository'] is None


@pytest.mark.asyncio
async def test_get_submissions_2(client_test, dataset_data):
"""Testing the get submissions route with different submission types"""

# add a dataset record to the db - this will also add a submission record
dataset_response = await client_test.post("api/catalog/dataset", json=dataset_data)
assert dataset_response.status_code == 201
dataset_response_data = dataset_response.json()
s3_path = {
"path": "data/.hs/dataset_metadata.json",
"bucket": "iguide-catalog",
"endpoint_url": "https://iguide-catalog.s3.us-west-2.amazonaws.com/",
}

payload = {
"s3_path": s3_path,
"document": dataset_data
}

dataset_response = await client_test.post("api/catalog/dataset/s3", json=payload)
assert dataset_response.status_code == 201
dataset_response_data = [dataset_response_data, dataset_response.json()]

# add a dataset record to the db simulation HydroShare submission
hs_published_res_id = "b5f58460941c49578e311adb9823657a"
dataset_response = await client_test.get(f"api/catalog/repository/hydroshare/{hs_published_res_id}")
assert dataset_response.status_code == 200
dataset_response_data = dataset_response_data + [dataset_response.json()]
# retrieve all submissions for the current user from the db
submission_response = await client_test.get("api/catalog/submission")
assert submission_response.status_code == 200
submission_response_data = submission_response.json()
assert len(submission_response_data) == 3
assert submission_response_data[0]['identifier'] != submission_response_data[1]['identifier']
assert submission_response_data[0]['title'] == dataset_response_data[0]['name']
assert submission_response_data[1]['title'] == dataset_response_data[1]['name']
assert submission_response_data[0]['identifier'] == dataset_response_data[0]['_id']
assert submission_response_data[1]['identifier'] == dataset_response_data[1]['_id']
assert submission_response_data[0]['url'] == dataset_response_data[0]['url']
assert submission_response_data[1]['url'] == dataset_response_data[1]['url']
assert submission_response_data[0]['repository'] is None
assert submission_response_data[1]['repository'] == RepositoryType.S3
assert submission_response_data[2]['repository'] == RepositoryType.HYDROSHARE


async def _check_hs_submission(hs_dataset, user_access_token, hs_published_res_id):
Expand All @@ -281,4 +366,3 @@ async def _check_hs_submission(hs_dataset, user_access_token, hs_published_res_i
assert user.submission(submission_id) is not None
assert user.submission(submission_id).repository == "HYDROSHARE"
assert user.submission(submission_id).repository_identifier == hs_published_res_id
assert user.submission(submission_id).type == SubmissionType.HYDROSHARE

0 comments on commit eb24f9a

Please sign in to comment.