def test_02_request(self): # Check we can instantiate and work with a Request # first make a blank one req = Request() # now make one around the fixture source = RequestFixtureFactory.example() req = Request(source) # make one with a broken source broken = {"whatever" : "broken"} with self.assertRaises(dataobj.DataStructureException): req = Request(broken) # now make one bit by bit req = Request() req.record = source.get("record") req.owner = "test1" req.action = "update" req.public_id = "abcdefg" assert req.owner == "test1" assert req.action == "update" assert req.public_id == "abcdefg" # now make it broken req = Request() with self.assertRaises(dataobj.DataStructureException): req.record = {"random" : "stuff"}
def delete(cls, record, account, public_id=None): """ Record a "delete" request, with the associated (minimal) record data, requested by the given account Delete requests need only come with enough record data to identify the public record :param record: The mimimal record data for identifying the record :param account: the account to carry out the request on behalf of :param public_id: the public id of a public record for which this is a delete request :return: the Request object that was created """ if record is None: raise RequestAPIException("You can't call 'delete' with a NoneType record argument") if account is None: raise RequestAPIException("You can't call 'delete' with a NoneType account argument") req = Request() req.record = record req.owner = account.id req.action = "delete" if public_id is not None: req.public_id = public_id req.save() return req
def test_06_publish_update(self): # Publish an update to an existing PublicAPC merge_source = PublicAPCFixtureFactory.record_merge_source() merge_target = PublicAPCFixtureFactory.record_merge_target() apc_record = PublicAPCFixtureFactory.apc_record() result = PublicAPCFixtureFactory.record_merge_result() del merge_source["jm:apc"] del merge_target["jm:apc"] del result["jm:apc"] first = deepcopy(apc_record) second = deepcopy(apc_record) third = deepcopy(apc_record) first["organisation_name"] = "First" del first["ref"] second["organisation_name"] = "Second" del second["ref"] third["organisation_name"] = "Third" del third["ref"] req = Request() req.record = merge_source req.add_apc_record(first) req.owner = "11111" pub = PublicAPC() pub.record = merge_target pub.add_apc_for_owner("22222", second) pub.add_apc_for_owner("11111", third) pub.save(blocking=True) PublicApi.publish(req) dao = PublicAPC() pub2 = dao.pull(pub.id) # first check that the apcs are as we would expect one = pub2.get_apcs_by_owner("11111") two = pub2.get_apcs_by_owner("22222") assert len(one) == 1 assert len(two) == 1 assert one[0]["organisation_name"] == "First" assert two[0]["organisation_name"] == "Second" # now check that the metadata merge proceeded correctly record = pub2.record del record["jm:apc"] assert record == result
def test_10_request_refs(self): # Check that APC refs are handled correctly by Reuqests # first check that refs are stripped automatically on construction source = RequestFixtureFactory.example() source["record"]["jm:apc"][0]["ref"] = "1234567890" req = Request(source) assert "ref" not in req.apc_records[0] # now do it again, setting the record explicitly source = RequestFixtureFactory.example() record = source.get("record") record["jm:apc"][0]["ref"] = "123456789" req = Request() req.record = record assert "ref" not in req.apc_records[0]
def update(cls, record, account, public_id=None): """ Record an "update" request, with the associated record data, requested by the given account :param record: The raw dict data (e.g. coming from the web API) which makes up the body of the request :param account: the account to carry out the request on behalf of :param public_id: The public id of a public record for which this is an update :return: the Request object that was created """ if record is None: raise RequestAPIException("You can't call 'update' with a NoneType record argument") if account is None: raise RequestAPIException("You can't call 'update' with a NoneType account argument") req = Request() req.record = record req.owner = account.id req.action = "update" if public_id is not None: req.public_id = public_id req.save() return req