File size: 1,692 Bytes
b2add11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import duckdb
import pytest
import os


# 関数の定義部分
def create_table_from_csv(db_path, csv_file_path, table_name):
    conn = duckdb.connect(db_path)
    conn.execute(
        f"""
        CREATE TABLE {table_name} AS
        SELECT * FROM read_csv_auto('{csv_file_path}')
    """
    )
    conn.close()


def fetch_all_from_table(db_path, table_name):
    conn = duckdb.connect(db_path)
    result = conn.execute(f"SELECT * FROM {table_name}").fetchall()
    conn.close()
    return result


# テスト部分
@pytest.fixture
def setup_csv_file(tmpdir):
    # テスト用のCSVファイルを作成
    csv_file_path = tmpdir.join("test_data.csv")
    with open(csv_file_path, "w") as f:
        f.write("id,name\n")
        f.write("1,John Doe\n")
        f.write("2,Jane Smith\n")
    return csv_file_path


@pytest.fixture
def setup_db_file(tmpdir):
    # テスト用のDuckDBファイルを作成
    db_file_path = tmpdir.join("test_db.db")
    return db_file_path


def test_create_table_from_csv(setup_db_file, setup_csv_file):
    db_path = str(setup_db_file)
    csv_file_path = str(setup_csv_file)
    table_name = "test_table"

    # CSVファイルからテーブルを作成
    create_table_from_csv(db_path, csv_file_path, table_name)

    # データベースからテーブルのデータを取得
    result = fetch_all_from_table(db_path, table_name)

    # 期待されるデータ
    expected_result = [(1, "John Doe"), (2, "Jane Smith")]

    # 結果が期待されるデータと一致することを確認
    assert result == expected_result


# テストを実行するためのメイン関数
if __name__ == "__main__":
    pytest.main([__file__])