-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
In progress adding new resources references
- Loading branch information
Showing
6 changed files
with
107 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
import pytest | ||
from types import SimpleNamespace | ||
from ckan.plugins import toolkit | ||
from ckan.lib.helpers import url_for | ||
from ckan.tests import factories | ||
|
||
from ckanext.api_tracking.tests import factories as tf | ||
|
||
|
||
@pytest.fixture | ||
def base_data(): | ||
obj = SimpleNamespace() | ||
obj.sysadmin = factories.SysadminWithToken() | ||
obj.user1 = factories.UserWithToken() | ||
obj.user2 = factories.UserWithToken() | ||
obj.dataset1 = factories.Dataset() | ||
obj.dataset2 = factories.Dataset() | ||
obj.resource11 = factories.Resource(package_id=obj.dataset1['id']) | ||
obj.resource12 = factories.Resource(package_id=obj.dataset1['id']) | ||
obj.resource13 = factories.Resource(package_id=obj.dataset1['id']) | ||
obj.resource21 = factories.Resource(package_id=obj.dataset2['id']) | ||
obj.resource22 = factories.Resource(package_id=obj.dataset2['id']) | ||
obj.trackings = [] | ||
for user in [obj.user1, obj.user1, obj.user2]: | ||
for dataset in [obj.dataset1, obj.dataset1, obj.dataset2]: | ||
new_tracking = tf.TrackingUsageAPIDataset(user=user, object_id=dataset['id']) | ||
obj.trackings.append(new_tracking) | ||
for resource in [obj.resource11, obj.resource12, obj.resource13, obj.resource21, obj.resource22]: | ||
new_tracking = tf.TrackingUsageAPIResource(user=user, object_id=resource['id']) | ||
obj.trackings.append(new_tracking) | ||
for resource in [obj.resource11, obj.resource12, obj.resource13, obj.resource21, obj.resource22]: | ||
new_tracking = tf.TrackingUsageAPIResourceDownload(user=user, object_id=resource['id']) | ||
obj.trackings.append(new_tracking) | ||
return obj | ||
|
||
|
||
@pytest.mark.usefixtures('clean_db', 'api_tracking_migrate') | ||
class TestTrackingCSVView: | ||
""" Test basic tracking from requests """ | ||
def test_dataset_with_token_csv_no_user(self, app): | ||
""" Test the endpoint is closed for anonymous users """ | ||
url = url_for('tracking_csv.most_accessed_resource_with_token_csv') | ||
with pytest.raises(toolkit.NotAuthorized): | ||
app.get(url) | ||
|
||
def test_dataset_with_token_csv_no_auth(self, app, base_data): | ||
""" Test the endpoint is closed for regular users """ | ||
url = url_for('tracking_csv.most_accessed_resource_with_token_csv') | ||
auth = {"Authorization": base_data.user1['token']} | ||
with pytest.raises(toolkit.NotAuthorized): | ||
app.get(url, extra_environ=auth) | ||
|
||
def test_dataset_with_token_csv(self, app, base_data): | ||
url = url_for('tracking_csv.most_accessed_resource_with_token_csv') | ||
# download the CSV | ||
auth = {"Authorization": base_data.sysadmin['token']} | ||
response = app.get(url, extra_environ=auth) | ||
assert response.status_code == 200 | ||
# save the response locally | ||
full_response = response.body | ||
with open('most-accessed-dataset-with-token.csv', 'w') as f: | ||
f.write(full_response) | ||
|
||
# check the CSV content | ||
lines = full_response.splitlines() | ||
header = lines[0].split(',') | ||
assert header == ['dataset_id', 'dataset_title', 'dataset_url', 'total'] | ||
rows = lines[1:] | ||
# They are just two datasets | ||
assert len(rows) == 2 | ||
for row in rows: | ||
fields = row.split(',') | ||
if fields[0] == base_data.dataset1['id']: | ||
assert fields[1] == base_data.dataset1['title'] | ||
assert fields[2] == url_for('dataset.read', id=base_data.dataset1['name'], qualified=True) | ||
assert fields[3] == '6' | ||
elif fields[0] == base_data.dataset2['id']: | ||
assert fields[1] == base_data.dataset2['title'] | ||
assert fields[2] == url_for('dataset.read', id=base_data.dataset2['name'], qualified=True) | ||
assert fields[3] == '3' | ||
else: | ||
assert False, f"Unexpected dataset id: {fields[0]}" |