Skip to content
This repository has been archived by the owner on Dec 2, 2021. It is now read-only.

Commit

Permalink
[#23] Add test for an empty latest-project-entries resource
Browse files Browse the repository at this point in the history
  • Loading branch information
brew committed May 16, 2017
1 parent 24f8961 commit 39092dc
Show file tree
Hide file tree
Showing 2 changed files with 91 additions and 6 deletions.
4 changes: 0 additions & 4 deletions datapackage_pipelines_measure/processors/add_npm_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
from datapackage_pipelines.generators import slugify
from datapackage_pipelines.wrapper import ingest, spew

# from datapackage_pipelines_measure.config import settings

import logging
log = logging.getLogger(__name__)

Expand Down Expand Up @@ -163,9 +161,7 @@ def get_latest_date(first):
return latest_date, iter(my_rows)

if len(datapackage['resources']):
log.debug('there is a resource')
if datapackage['resources'][0]['name'] == 'latest-project-entries':
log.debug('with the right name')
latest_date, latest_iter = get_latest_date(next(res_iter))
yield latest_iter
else:
Expand Down
93 changes: 91 additions & 2 deletions tests/test_npm_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,95 @@ def test_add_npm_resource_processor_no_latest(self, mock_request):
assert rows[3]['date'] == \
datetime.date.today() - datetime.timedelta(days=1)

@requests_mock.mock()
def test_add_npm_resource_processor_empty_latest(self, mock_request):
'''latest-project-entries is present, but empty.'''

day_range = 5
now = datetime.datetime.now()
# package created five days ago
created = now - datetime.timedelta(days=day_range)
created = created.strftime("%Y-%m-%d")
mock_registry = {
'time': {
'created': created
}
}
mock_api_responses = []
for day in reversed(range(1, day_range)):
start = now - datetime.timedelta(days=day)
start = start.strftime("%Y-%m-%d")
mock_api_responses.append({
'json': {
'downloads': day,
'start': start,
'end': start,
'package': 'my_package'
},
'status_code': 200
})
mock_request.get('https://registry.npmjs.org/my_package',
json=mock_registry)
matcher = re.compile('api.npmjs.org/downloads/point/')
mock_request.get(matcher, mock_api_responses)

# input arguments used by our mock `ingest`
datapackage = {
'name': 'my-datapackage',
'project': 'my-project',
'resources': [{
'name': 'latest-project-entries',
'schema': {
'fields': [
{'name': 'date', 'type': 'date'},
{'name': 'downloads', 'type': 'int'},
{'name': 'package', 'type': 'string'},
{'name': 'source', 'type': 'string'},
]
}
}]
}
params = {
'name': 'hello',
'package': 'my_package',
'project_id': 'my-project'
}

# Path to the processor we want to test
processor_dir = \
os.path.dirname(datapackage_pipelines_measure.processors.__file__)
processor_path = os.path.join(processor_dir, 'add_npm_resource.py')

# Trigger the processor with our mock `ingest` and capture what it will
# returned to `spew`.
spew_args, _ = \
mock_processor_test(processor_path,
(params, datapackage, iter([{}])))

# spew_dp = spew_args[0]
spew_res_iter = spew_args[1]

# two resources
resources = list(spew_res_iter)
assert len(resources) == 2

# No rows in first resource
assert len(list(resources[0])) == 0

# rows in second resource
rows = list(resources)[1]
assert len(rows) == 4
# row asserts
assert rows[0] == {
'date': datetime.date.today() - datetime.timedelta(days=4),
'downloads': 4,
'package': 'my_package',
'source': 'npm'
}
assert rows[3]['downloads'] == 1
assert rows[3]['date'] == \
datetime.date.today() - datetime.timedelta(days=1)

@requests_mock.mock()
def test_add_npm_resource_processor_week_old_latest(self, mock_request):
'''Latest in db for package is a week old, so fetch info from registry,
Expand Down Expand Up @@ -143,7 +232,7 @@ def test_add_npm_resource_processor_week_old_latest(self, mock_request):
{'name': 'source', 'type': 'string'},
]
}
}] # nothing here
}]
}
params = {
'name': 'hello',
Expand Down Expand Up @@ -225,7 +314,7 @@ def test_add_npm_resource_processor_latest_is_today(self, mock_request):
{'name': 'source', 'type': 'string'},
]
}
}] # nothing here
}]
}
params = {
'name': 'hello',
Expand Down

0 comments on commit 39092dc

Please sign in to comment.