In-memory Web Application¶
lime-test enables you to start up a complete web application in memory that you can make requests to to ensure that your endpoints work as they should. It builds on the in memory database to create a complete environment for your endpoints that is created for your specific test method, and teared down immediately afterwards.
It’s an implementation of Flasks’s test server
A simple example¶
Given the following endpoint:
class DealAverage(webserver.LimeResource):
def get(self, companyid):
company = self.application.limetypes.company.get(companyid)
avg = averagelib.average(company.properties.deal.fetch(), 'value')
return {'average': avg}
api.add_resource(DealAverage, '/dealaverage/<int:companyid>')
We can write the following test:
def test_calculate_average_for_deals(webapp, limeapp):
Company = limeapp.limetypes.company
Deal = limeapp.limetypes.deal
uow = limeapp.unit_of_work()
acme = Company(name='acme')
acme_idx = uow.add(acme)
deals = [
Deal(name='deal1', value=42),
Deal(name='deal2', value=128),
]
for d in deals:
acme.properties.deal.attach(d)
uow.add(d)
res = uow.commit()
acme = res[acme_idx]
res = webapp.get('/myapp/acme_solution/dealaverage/{acme.id}'
.format(acme=acme))
json_response = json.loads(res.data.decode('utf-8'))
assert res.status_code == 200
assert json_response == {'average': 85.0}