Skip to content
This repository has been archived by the owner on Sep 3, 2021. It is now read-only.

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
honza committed Aug 8, 2016
1 parent 03e9cdd commit 494a75e
Show file tree
Hide file tree
Showing 7 changed files with 102 additions and 15 deletions.
6 changes: 6 additions & 0 deletions .gitignore
@@ -1,2 +1,8 @@
*.pyc
docs/_build
venv
.eggs
.cache
.tox
.python-version
anosql.egg-info
1 change: 1 addition & 0 deletions anosql/__init__.py
@@ -1,2 +1,3 @@
from __future__ import absolute_import
from .core import load_queries
from .core import load_queries_from_string
28 changes: 13 additions & 15 deletions anosql/core.py
Expand Up @@ -22,9 +22,12 @@ class SQLParseException(Exception):

class Queries(object):

def __init__(self):
def __init__(self, queries=list()):
self.available_queries = []

for name, fn in queries:
self.add_query(name, fn)

def add_query(self, name, fn):
setattr(self, name, fn)

Expand Down Expand Up @@ -118,19 +121,8 @@ def fn(conn, *args, **kwargs):


def parse_queries_string(db_type, s):
result = s.split('\n\n')
result = map(partial(parse_sql_entry, db_type), result)

return result


def build_queries_object(queries):
q = Queries()

for name, fn in queries:
q.add_query(name, fn)

return q
return [parse_sql_entry(db_type, expression)
for expression in s.split('\n\n')]


def load_queries(db_type, filename):
Expand All @@ -139,5 +131,11 @@ def load_queries(db_type, filename):

with open(filename) as queries_file:
f = queries_file.read()

queries = parse_queries_string(db_type, f)
return build_queries_object(queries)
return Queries(queries)


def load_queries_from_string(db_type, string):
queries = parse_queries_string(db_type, string)
return Queries(queries)
2 changes: 2 additions & 0 deletions test_requirements.txt
@@ -0,0 +1,2 @@
tox
pytest
Empty file added tests/__init__.py
Empty file.
74 changes: 74 additions & 0 deletions tests/test_simple.py
@@ -0,0 +1,74 @@
import pytest

import anosql


@pytest.fixture
def sqlite(request):
import sqlite3
sqlconnection = sqlite3.connect(':memory:')

def fin():
"teardown"
print("teardown")
sqlconnection.close()

request.addfinalizer(fin)

return sqlconnection


def test_simple_query(sqlite):
_test_create_insert = ("-- name: create-some-table\n"
"-- testing insertion\n"
"CREATE TABLE foo (a, b, c);\n\n"
"-- name: insert-some-value\n"
"INSERT INTO foo (a, b, c) VALUES (1, 2, 3);\n")

q = anosql.load_queries_from_string("sqlite", _test_create_insert)
q.create_some_table(sqlite)
q.insert_some_value(sqlite)


def test_auto_insert_query(sqlite):
_test_create_insert = ("-- name: create-some-table\n"
"-- testing insertion\n"
"CREATE TABLE foo (a, b, c);\n\n"
"-- name: insert-some-value<!\n"
"INSERT INTO foo (a, b, c) VALUES (1, 2, 3);\n")

q = anosql.load_queries_from_string("sqlite", _test_create_insert)
q.create_some_table(sqlite)
assert q.insert_some_value_auto(sqlite) == 1
assert q.insert_some_value_auto(sqlite) == 2
assert q.insert_some_value_auto(sqlite) == 3


def test_parametrized_insert(sqlite):
_test_create_insert = ("-- name: create-some-table\n"
"-- testing insertion\n"
"CREATE TABLE foo (a, b, c);\n\n"
"-- name: insert-some-value\n"
"INSERT INTO foo (a, b, c) VALUES (%s, %s, %s);\n\n"
"-- name: get-all-values\n"
"SELECT * FROM foo;\n")

q = anosql.load_queries_from_string("sqlite", _test_create_insert)
q.create_some_table(sqlite)
q.insert_some_value(sqlite, 10, 11, 12)
assert q.get_all_values(sqlite) == [(10, 11, 12)]


def test_parametrized_insert_named(sqlite):
_test_create_insert = ("-- name: create-some-table\n"
"-- testing insertion\n"
"CREATE TABLE foo (a, b, c);\n\n"
"-- name: insert-some-value\n"
"INSERT INTO foo (a, b, c) VALUES (:a, :b, :c);\n\n"
"-- name: get-all-values\n"
"SELECT * FROM foo;\n")

q = anosql.load_queries_from_string("sqlite", _test_create_insert)
q.create_some_table(sqlite)
q.insert_some_value(sqlite, c=12, b=11, a=10)
assert q.get_all_values(sqlite) == [(10, 11, 12)]
6 changes: 6 additions & 0 deletions tox.ini
@@ -0,0 +1,6 @@
[tox]
envlist = py27, py35

[testenv]
deps = -rtest_requirements.txt
commands = py.test tests

0 comments on commit 494a75e

Please sign in to comment.