def test_collect_query_parameters(self): json = { "find": ["id", "title", "content", { "comments": ["id", "comment"] }], "where": { "id": 13 } } initial_state = Immutable(data=None, errors=[]) process = compose_list([ change("json", json), change("type", Article), collect_query_parameters ]) final_state = process(initial_state) qp = final_state.query_parameters self.assertEquals(qp["properties"], [ Article.id, Article.title, Article.content, Comment.id, Comment.comment ]) self.assertEquals(qp["joins"], [Article.comments]) self.assertEquals(str(qp["conditions"][0]), str(Article.id == 13)) self.assertEquals(qp["first_property"], Article.id)
def get_transform_from_json(self, json): initial_state = Immutable(data=None, errors=[]) process = compose_list([ change("json", json), change("data", Article()), change("type", Article), transform_from_json ]) return process(initial_state)
def test_to_json(self, to_json): json = {"title": "A title", "content": "Some content"} initial_state = Immutable(data=None, errors=[]) process = compose_list([change("data", json), to_json]) final_state = process(initial_state) json_final = loads(final_state) #assert the object contains the values self.compareRecursively({"data": json}, json_final, [])
def get_database_object_for(self, json, session): initial_state = Immutable(data=None, errors=[]) process = compose_list([ change("json", json), change("session", session), change("type", Article), get_database_object ]) return process(initial_state)
def test_transform_to_json_article(self): initial_state = Immutable(data=None, errors=[]) process = compose_list([ change("data", Article(title="title", content="content")), change("type", Article), transform_to_json ]) final_state = process(initial_state) #assert the object contains the values json = value("data")(final_state) self.assertTrue(json.has_key("id")) self.assertEquals("title", json["title"]) self.assertEquals("content", json["content"])
def save(json, session): initial_state = Immutable(data=None, errors=[]) process = compose_list([ change("json", json), change("session", session), change("type", Article), get_database_object, transform_from_json, save_database_object, transform_to_json, to_json ]) final_state = process(initial_state) return final_state
def test_run_queries(self): #given an article in the database session = Session() new_article = Article(title="Title", content="Content", comments=[ Comment(comment="my first comment"), Comment(comment="my second comment") ]) session.add(new_article) session.commit() id = new_article.id session.close() session = Session() queries = { "query_ids": session.query(Article.id).outerjoin(Article.comments).filter( Article.id == id).group_by(Article.id), "query": session.query(Article.id, Article.title, Article.content, Comment.id, Comment.comment).outerjoin( Article.comments).group_by( Article.id, Article.title, Article.content, Comment.id, Comment.comment), "first_property": Article.id } initial_state = Immutable(data=None, errors=[]) process = compose_list([ change("queries", queries), change("type", Article), change("session", session), run_queries ]) final_state = process(initial_state) results = final_state.data self.assertEquals(results[0][0], id) self.assertEquals(results[0][1], "Title") self.assertEquals(results[0][2], "Content") self.assertEquals(results[0][4], "my first comment") self.assertEquals(results[1][0], id) self.assertEquals(results[1][1], "Title") self.assertEquals(results[1][2], "Content") self.assertEquals(results[1][4], "my second comment")
def query(json, session): initial_state = Immutable(data=None, errors=[]) process = compose_list([ change("json", json), change("session", session), change("type", Article), collect_query_parameters, generate_queries, run_queries, transform_results, to_json ]) # transform("data", "data"), final_state = process(initial_state) return final_state
def test_save_database_object(self): initial_state = Immutable(data=None, errors=[]) title = "Saved "+str(random()) process = compose_list([ change("data", Article(title=title, content="Added content")), change("session", Session()), save_database_object ]) final_state = process(initial_state) # assert it exists in the database saved_object = Session().query(Article).filter(Article.title==title).first() self.assertEquals(title, saved_object.title) self.assertEquals("Added content", saved_object.content)
def test_transform_results(self): results = [(1, "my title", "my content", 10, "my first comment"), (1, "my title", "my content", 11, "my second comment")] initial_state = Immutable(data=None, errors=[]) process = compose_list([ change( "json", { "find": [ "id", "title", "content", { "comments": ["id", "comment"] } ] }), change("data", results), transform_results ]) final_state = process(initial_state) expected_json = { 1: { "id": 1, "title": "my title", "content": "my content", "comments": { 10: { "id": 10, "comment": "my first comment" }, 11: { "id": 11, "comment": "my second comment" } } } } self.compareRecursively(expected_json, final_state.data, [])
def test_generate_queries(self): qp = { "properties": [ Article.id, Article.title, Article.content, Comment.id, Comment.comment ], "joins": [Article.comments], "conditions": [Article.id == 13] } session = Session() initial_state = Immutable(data=None, errors=[]) process = compose_list([ change("query_parameters", qp), change("type", Article), change("session", session), generate_queries ]) final_state = process(initial_state) queries = final_state.queries self.assertEquals( str(queries["query_ids"]), str( session.query(Article.id).outerjoin(Article.comments).filter( Article.id == 13).group_by(Article.id))) self.assertEquals( str(queries["query"]), str( session.query( Article.id, Article.title, Article.content, Comment.id, Comment.comment).outerjoin(Article.comments).group_by( Article.id, Article.title, Article.content, Comment.id, Comment.comment))) self.assertEquals(queries["first_property"], Article.id)