From 3b7375fcc6d84b717360217afc36089d488e5eb4 Mon Sep 17 00:00:00 2001 From: Rami Abdelrazzaq Date: Sun, 13 Sep 2026 12:11:51 -0500 Subject: [PATCH] test: cover CSV export helper --- tests/test_export.py | 49 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 tests/test_export.py diff --git a/tests/test_export.py b/tests/test_export.py new file mode 100644 index 0000000..bb91022 --- /dev/null +++ b/tests/test_export.py @@ -0,0 +1,49 @@ +import io +import sqlite3 + +import pytest + +from sqlite_utils.export import rows_to_csv_file + + +def _cursor(): + db = sqlite3.connect(":memory:") + db.execute("create table creatures (id integer, name text)") + db.executemany( + "insert into creatures (id, name) values (?, ?)", + ((1, "Cleo"), (2, "Cardi, Jr.")), + ) + return db, db.execute("select id, name from creatures order by id") + + +def test_rows_to_csv_file(): + db, cursor = _cursor() + output = io.StringIO(newline="") + rows_to_csv_file(cursor, output, lineterminator="\n") + assert output.getvalue() == 'id,name\n1,Cleo\n2,"Cardi, Jr."\n' + db.close() + + +def test_rows_to_csv_file_without_header(): + db, cursor = _cursor() + output = io.StringIO(newline="") + rows_to_csv_file(cursor, output, header=False, lineterminator="\n") + assert output.getvalue() == '1,Cleo\n2,"Cardi, Jr."\n' + db.close() + + +def test_rows_to_csv_file_tsv(): + db, cursor = _cursor() + output = io.StringIO(newline="") + rows_to_csv_file(cursor, output, dialect="excel-tab", lineterminator="\n") + assert output.getvalue() == "id\tname\n1\tCleo\n2\tCardi, Jr.\n" + db.close() + + +def test_rows_to_csv_file_requires_result_columns_for_header(): + db = sqlite3.connect(":memory:") + cursor = db.execute("create table creatures (id integer)") + output = io.StringIO(newline="") + with pytest.raises(ValueError, match="Cursor does not have result columns"): + rows_to_csv_file(cursor, output) + db.close()