def test_create_no_source_name(self): self.moxer.StubOutWithMock(ArtifactInfo, "all", use_mock_anything=True) self.moxer.ReplayAll() try: ArtifactAccessor.create(msg='hi') self.fail("exception expected.") except IllegalArgumentException: pass self.moxer.VerifyAll()
def test_create_no_source_name(self): self.moxer.StubOutWithMock(ArtifactInfo, "all", use_mock_anything=True) self.moxer.ReplayAll() try: ArtifactAccessor.create(msg='hi') self.fail("exception expected.") except IllegalArgumentException: pass self.moxer.VerifyAll()
def test_create_duplicate(self): self.moxer.StubOutWithMock(ArtifactInfo, "all", use_mock_anything=True) ArtifactInfo.all(keys_only=True).AndReturn(MockQuery(range(1), keys_only=True)) self.moxer.ReplayAll() try: ArtifactAccessor.create(**self.__keywords()) self.fail("exception expected") except DuplicateDataException, ex: pass
def test_create_duplicate(self): self.moxer.StubOutWithMock(ArtifactInfo, "all", use_mock_anything=True) ArtifactInfo.all(keys_only=True).AndReturn( MockQuery(range(1), keys_only=True)) self.moxer.ReplayAll() try: ArtifactAccessor.create(**self.__keywords()) self.fail("exception expected") except DuplicateDataException, ex: pass
def test_create(self): accessor_save_kw = self.__keywords() source_name = accessor_save_kw['source'] content_type = accessor_save_kw['content_type'] body = accessor_save_kw['body'] self.moxer.StubOutWithMock(ArtifactInfo, "all", use_mock_anything=True) self.moxer.StubOutWithMock(ArtifactSource, "get_or_create", use_mock_anything=True) self.moxer.StubOutWithMock(Counters, "source_counter", use_mock_anything=True) self.moxer.StubOutWithMock(ArtifactInfo, "create", use_mock_anything=True) self.moxer.StubOutWithMock(ArtifactContent, "create", use_mock_anything=True) source = MockEntity(key_name=source_name) ArtifactInfo.all(keys_only=True).AndReturn(MockQuery(None, keys_only=True)) ArtifactSource.get_or_create(source_name).AndReturn(source) counter = self.moxer.CreateMockAnything() Counters.source_counter(source_name).AndReturn(counter) counter.increment() # TODO: I wish I could ignore keywords md5 = ArtifactAccessor._content_md5(source_name, content_type, body) info_save_kw = dict(source=source, source_name=source_name, content_type=content_type, content_md5=md5) info_key = MockKey(name=self.test_id) ArtifactInfo.create(**info_save_kw).AndReturn(info_key) content_save_kw = dict(source=source, source_name=source_name, info=info_key, body=body) ArtifactContent.create(info_key.name(), **content_save_kw).AndReturn(MockKey(name=self.test_id)) self.moxer.ReplayAll() info, content, source = ArtifactAccessor.create(**accessor_save_kw) print 'info:%s, content:%s, source:%s' % (info, content, source) self.moxer.VerifyAll()
class ArtifactsHelper: @classmethod def post(cls, request_handler, **kw): helper = RequestHelper(request_handler) request = request_handler.request username = kw.get("username", None) user = User(username) if username else users.get_current_user() json_body = request.body if not json_body: helper.error(400, "body required") return decoded_body = urllib.unquote(json_body) try: artifact_hash = json.loads(decoded_body) except json.JSONDecodeError, e: msg = "malformed json: %s" % decoded_body helper.error(400, msg) logging.info(msg) return # de-unicodes keys decoded_hash = {} for k, v in artifact_hash.iteritems(): decoded_hash[k.encode("utf-8")] = v fields = ("source", "content-type", "body") result = Hashes.fetch_fields(decoded_hash, fields) if result.missing_fields: msg = "missing fields: %s" % result.missing_fields helper.error(400, msg) logging.info(msg) return source, content_type, content_body = result.values # name of info_key is guid try: info_key, src_key, content_key = ArtifactAccessor.create(source=source, content_type=content_type, body=content_body, modified_by=user) guid = info_key.name() helper.set_status(204) location = cls.artifact_uri(request, guid) helper.header("Location", location) except DuplicateDataException, ex: helper.error(409, ex.message)
def test_create(self): accessor_save_kw = self.__keywords() source_name = accessor_save_kw['source'] content_type = accessor_save_kw['content_type'] body = accessor_save_kw['body'] self.moxer.StubOutWithMock(ArtifactInfo, "all", use_mock_anything=True) self.moxer.StubOutWithMock(ArtifactSource, "get_or_create", use_mock_anything=True) self.moxer.StubOutWithMock(Counters, "source_counter", use_mock_anything=True) self.moxer.StubOutWithMock(ArtifactInfo, "create", use_mock_anything=True) self.moxer.StubOutWithMock(ArtifactContent, "create", use_mock_anything=True) source = MockEntity(key_name=source_name) ArtifactInfo.all(keys_only=True).AndReturn( MockQuery(None, keys_only=True)) ArtifactSource.get_or_create(source_name).AndReturn(source) counter = self.moxer.CreateMockAnything() Counters.source_counter(source_name).AndReturn(counter) counter.increment() # TODO: I wish I could ignore keywords md5 = ArtifactAccessor._content_md5(source_name, content_type, body) info_save_kw = dict(source=source, source_name=source_name, content_type=content_type, content_md5=md5) info_key = MockKey(name=self.test_id) ArtifactInfo.create(**info_save_kw).AndReturn(info_key) content_save_kw = dict(source=source, source_name=source_name, info=info_key, body=body) ArtifactContent.create(info_key.name(), **content_save_kw).AndReturn( MockKey(name=self.test_id)) self.moxer.ReplayAll() info, content, source = ArtifactAccessor.create(**accessor_save_kw) print 'info:%s, content:%s, source:%s' % (info, content, source) self.moxer.VerifyAll()
def test_create_empty(self): try: ArtifactAccessor.create() self.fail("exception expected") except IllegalArgumentException, ex: pass
def test_create_empty(self): try: ArtifactAccessor.create() self.fail("exception expected") except IllegalArgumentException, ex: pass