def test_parse_hash(self): _hash = "" self.assertEqual("", parse_hash(_hash)) _hash = "2-909f500147c5c6d6ed16357fcee10f8b" self.assertEqual("909f500147c5c6d6ed16357fcee10f8b", parse_hash(_hash)) _hash = "909f500147c5c6d6ed16357fcee10f8b" self.assertEqual("", parse_hash(_hash))
def test_get_tender_versioned(self): response = self.app.get('/tenders') self.assertEqual(response.status, '200 OK') self.assertEqual(len(response.json['data']), 0) response = self.app.post_json('/tenders', {'data': test_tender_data}) self.assertEqual(response.status, '201 Created') tender = response.json['data'] self.tender_id = tender['id'] self._update_doc() doc = test_data_with_revisions.copy() revisions = doc.pop('revisions') for i, rev in list(enumerate(revisions))[1:]: path = '/tenders/{}/historical'.format(self.tender_id) response = self.app.get(path, headers={VERSION: str(i)}) tender = response.json['data'] headers = response.headers self.assertEqual(headers[HASH], parse_hash(rev['rev'])) self.assertEqual(headers[VERSION], str(i)) self.assertEqual(headers[PHASH], parse_hash(revisions[i - 1].get('rev', ''))) for ch in [r for r in rev['changes']]: val = ch['value'] if ch['op'] != 'remove' else 'missing' if not all(p for p in ['next_check', 'shouldStartAfter'] if ch['path'] in p): self.assertEqual( resolve_pointer(tender, ch['path'], 'missing'), val) if rev['author'] != 'chronograph': if any('bids' in c['path'] for c in rev['changes']): self.assertNotEqual(tender['dateModified'], rev['date'])
def test_parse_hash(self): _hash = '' self.assertEqual('', parse_hash(_hash)) _hash = '2-909f500147c5c6d6ed16357fcee10f8b' self.assertEqual('909f500147c5c6d6ed16357fcee10f8b', parse_hash(_hash)) _hash = '909f500147c5c6d6ed16357fcee10f8b' self.assertEqual('', parse_hash(_hash))
def test_get_tender_versioned(self): response = self.app.get("/tenders") self.assertEqual(response.status, "200 OK") self.assertEqual(len(response.json["data"]), 0) response = self.app.post_json("/tenders", {"data": test_tender_data}) self.assertEqual(response.status, "201 Created") tender = response.json["data"] self.tender_id = tender["id"] self._update_doc() doc = test_data_with_revisions.copy() revisions = doc.pop("revisions") for i, rev in list(enumerate(revisions))[1:]: path = "/tenders/{}/historical".format(self.tender_id) response = self.app.get(path, headers={VERSION: str(i)}) tender = response.json["data"] headers = response.headers self.assertEqual(headers[HASH], parse_hash(rev["rev"])) self.assertEqual(headers[VERSION], str(i)) self.assertEqual(headers[PHASH], parse_hash(revisions[i - 1].get("rev", ""))) for ch in [r for r in rev["changes"]]: val = ch["value"] if ch["op"] != "remove" else "missing" if not all(p for p in ["next_check", "shouldStartAfter"] if ch["path"] in p): self.assertEqual(resolve_pointer(tender, ch["path"], "missing"), val) if rev["author"] != "chronograph": if any("bids" in c["path"] for c in rev["changes"]): self.assertNotEqual(tender["dateModified"], rev["date"])
def test_apply_patch(self): doc = deepcopy(mock_doc) revisions = doc.pop("revisions") for version, rev in enumerate(revisions[1:], 1): response = self.app.get("/mock/{}/historical".format(mock_doc.id), headers={"X-Revision-N": str(version)}) self.assertEqual(response.status, "200 OK") self.assertEqual(response.headers.get(HASH), parse_hash(rev.get("rev"))) self.assertEqual(response.headers.get(VERSION), str(version)) data = response.json data.pop("Base") for ch in rev["changes"]: val = ch["value"] if ch["op"] != "remove" else "missing" self.assertEqual(resolve_pointer(data, ch["path"], "missing"), val)
def test_apply_patch(self): doc = deepcopy(mock_doc) revisions = doc.pop('revisions') for version, rev in enumerate(revisions[1:], 1): response = self.app.get('/mock/{}/historical'.format(mock_doc.id), headers={'X-Revision-N': str(version)}) self.assertEqual(response.status, '200 OK') self.assertEqual(response.headers.get(HASH), parse_hash(rev.get('rev'))) self.assertEqual(response.headers.get(VERSION), str(version)) data = response.json data.pop('Base') for ch in rev['changes']: val = ch['value'] if ch['op'] != 'remove' else 'missing' self.assertEqual(resolve_pointer(data, ch['path'], 'missing'), val)