Skip to content

Commit

Permalink
add mysql/postgresql test to github action
Browse files Browse the repository at this point in the history
  • Loading branch information
z-Wind committed Apr 13, 2024
1 parent f022e5e commit 27f7907
Show file tree
Hide file tree
Showing 8 changed files with 506 additions and 467 deletions.
145 changes: 129 additions & 16 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,39 @@ jobs:
- name: Rust Cache dependencies
uses: Swatinem/rust-cache@v2

- name: Clippy without Decimal
- name: Clippy --features sqlite,postgresql,mysql,xml
run: cargo clippy --features sqlite,postgresql,mysql,xml --all-targets -- -D warnings
- name: Clippy with Decimal

- name: Clippy --features sqlite
run: cargo clippy --features sqlite --all-targets -- -D warnings

- name: Clippy --features postgresql
run: cargo clippy --features postgresql --all-targets -- -D warnings

- name: Clippy --features mysql
run: cargo clippy --features mysql --all-targets -- -D warnings

- name: Clippy --features xml
run: cargo clippy --features xml --all-targets -- -D warnings

- name: Clippy --features sqlite,postgresql,mysql,xml,decimal
run: cargo clippy --features sqlite,postgresql,mysql,xml,decimal --all-targets -- -D warnings

- name: Clippy --features sqlite,decimal
run: cargo clippy --features sqlite,decimal --all-targets -- -D warnings

- name: Clippy --features postgresql,decimal
run: cargo clippy --features postgresql,decimal --all-targets -- -D warnings

- name: Clippy --features mysql,decimal
run: cargo clippy --features mysql,decimal --all-targets -- -D warnings

test:
name: Test
- name: Clippy --features xml,decimal
run: cargo clippy --features xml,decimal --all-targets -- -D warnings


test_sqlite_xml:
name: Test SQLite & XML
needs: [lint]
runs-on: ${{ matrix.os }}
strategy:
Expand All @@ -50,6 +75,7 @@ jobs:
- ubuntu-latest
- macos-latest
- windows-latest

steps:
- uses: actions/checkout@v4

Expand All @@ -59,24 +85,111 @@ jobs:
- name: Install latest nextest release
uses: taiki-e/install-action@nextest

# - name: Run tests --features sqlite,postgresql,mysql,xml
# run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features sqlite,postgresql,mysql,xml
- name: Run tests --features sqlite
run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features sqlite
# - name: Run tests --features postgresql
# run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features postgresql
# - name: Run tests --features mysql
# run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features mysql

- name: Run tests --features xml
run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features xml
# - name: Run tests --features sqlite,postgresql,mysql,xml,decimal
# run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features sqlite,postgresql,mysql,xml,decimal

- name: Run tests --features sqlite,decimal
run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features sqlite,decimal
# - name: Run tests --features postgresql,decimal
# run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features postgresql,decimal
# - name: Run tests --features mysql,decimal
# run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features mysql,decimal

- name: Run tests --features xml,decimal
run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features xml,decimal

- name: Run doc tests
run: |
cargo test --doc --features sqlite,xml
cargo test --doc --features sqlite,xml,decimal
test_mysql:
name: Test MySQL
needs: [lint]
runs-on: ubuntu-latest

services:
mysql:
image: mysql:8.0
ports:
- 3306:3306
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: user
MYSQL_PASSWORD: secret
MYSQL_DATABASE: complex_sample.gnucash
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3

steps:
- uses: actions/checkout@v4

- name: Rust Cache dependencies
uses: Swatinem/rust-cache@v2

- name: Install latest nextest release
uses: taiki-e/install-action@nextest

- name: Prepare Database
run: |
mysql --version
sudo apt-get install -y mysql-client
mysql -u user --password=secret --host 127.0.0.1 --port 3306 complex_sample.gnucash < "${{ github.workspace }}/tests/db/mysql/complex_sample.gnucash.sql"
shell: bash

- name: Run tests --features mysql
run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features mysql

- name: Run tests --features mysql,decimal
run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features mysql,decimal

- name: Run doc tests
run: |
cargo test --doc --features mysql
cargo test --doc --features mysql,decimal
test_postgresql:
name: Test PostgreSQL
needs: [lint]
runs-on: ubuntu-latest

services:
postgres:
image: postgres:16.2
env:
POSTGRES_USER: user
POSTGRES_PASSWORD: secret
POSTGRES_DB: complex_sample.gnucash
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v4

- name: Rust Cache dependencies
uses: Swatinem/rust-cache@v2

- name: Install latest nextest release
uses: taiki-e/install-action@nextest

- name: Prepare Database
run: |
psql --version
psql -d "postgresql://user:secret@localhost:5432/complex_sample.gnucash" < "${{ github.workspace }}/tests/db/postgresql/complex_sample.gnucash.sql"
shell: bash

- name: Run tests --features postgresql
run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features postgresql

- name: Run tests --features postgresql,decimal
run: cargo nextest run --config-file ${{ github.workspace }}/.github/nextest.toml --profile ci --features postgresql,decimal

- name: Run doc tests
run: |
cargo test --doc --features postgresql
cargo test --doc --features postgresql,decimal
3 changes: 3 additions & 0 deletions makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,6 @@ prepare:
cargo sqlx prepare --database-url sqlite://tests/db/sqlite/complex_sample.gnucash?mode=ro -- --tests --features sqlite,schema
cargo sqlx prepare --database-url mysql://user:secret@localhost/complex_sample.gnucash -- --tests --features mysql,schema
cargo sqlx prepare --database-url postgresql://user:secret@localhost:5432/complex_sample.gnucash -- --tests --features postgres,schema
backup:
pg_dump -U user -f "tests/db/postgresql/complex_sample.gnucash.sql" complex_sample.gnucash
mysqldump -h localhost -u user -p complex_sample.gnucash > "tests/db/mysql/complex_sample.gnucash.sql"
2 changes: 1 addition & 1 deletion src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ pub enum Error {
#[error("I/O error: {0}")]
IO(#[from] std::io::Error),

#[cfg(any(feature = "sqlite", feature = "postgres", feature = "mysql"))]
#[cfg(any(feature = "sqlite", feature = "postgresql", feature = "mysql"))]
#[error("SQLx error: {0}")]
Sql(#[from] sqlx::Error),

Expand Down
84 changes: 72 additions & 12 deletions src/model/account.rs
Original file line number Diff line number Diff line change
Expand Up @@ -276,9 +276,24 @@ mod tests {
let children = account.children().await.unwrap();

assert_eq!(children.len(), 3);
assert_eq!(children[0].name, "Current");
assert_eq!(children[1].name, "Fixed");
assert_eq!(children[2].name, "Broker");
assert!(
children
.iter()
.map(|x| &x.name)
.any(|name| name == "Current"),
"children does not contains Current"
);
assert!(
children.iter().map(|x| &x.name).any(|name| name == "Fixed"),
"children does not contains Fixed"
);
assert!(
children
.iter()
.map(|x| &x.name)
.any(|name| name == "Broker"),
"children does not contains Broker"
);
}

#[tokio::test]
Expand Down Expand Up @@ -452,9 +467,24 @@ mod tests {
let children = account.children().await.unwrap();

assert_eq!(children.len(), 3);
assert_eq!(children[0].name, "Current");
assert_eq!(children[1].name, "Fixed");
assert_eq!(children[2].name, "Broker");
assert!(
children
.iter()
.map(|x| &x.name)
.any(|name| name == "Current"),
"children does not contains Current"
);
assert!(
children.iter().map(|x| &x.name).any(|name| name == "Fixed"),
"children does not contains Fixed"
);
assert!(
children
.iter()
.map(|x| &x.name)
.any(|name| name == "Broker"),
"children does not contains Broker"
);
}

#[tokio::test]
Expand Down Expand Up @@ -628,9 +658,24 @@ mod tests {
let children = account.children().await.unwrap();

assert_eq!(children.len(), 3);
assert_eq!(children[0].name, "Current");
assert_eq!(children[1].name, "Fixed");
assert_eq!(children[2].name, "Broker");
assert!(
children
.iter()
.map(|x| &x.name)
.any(|name| name == "Current"),
"children does not contains Current"
);
assert!(
children.iter().map(|x| &x.name).any(|name| name == "Fixed"),
"children does not contains Fixed"
);
assert!(
children
.iter()
.map(|x| &x.name)
.any(|name| name == "Broker"),
"children does not contains Broker"
);
}

#[tokio::test]
Expand Down Expand Up @@ -809,9 +854,24 @@ mod tests {
let children = account.children().await.unwrap();

assert_eq!(children.len(), 3);
assert_eq!(children[0].name, "Current");
assert_eq!(children[1].name, "Fixed");
assert_eq!(children[2].name, "Broker");
assert!(
children
.iter()
.map(|x| &x.name)
.any(|name| name == "Current"),
"children does not contains Current"
);
assert!(
children.iter().map(|x| &x.name).any(|name| name == "Fixed"),
"children does not contains Fixed"
);
assert!(
children
.iter()
.map(|x| &x.name)
.any(|name| name == "Broker"),
"children does not contains Broker"
);
}

#[tokio::test]
Expand Down
20 changes: 10 additions & 10 deletions src/model/split.rs
Original file line number Diff line number Diff line change
Expand Up @@ -241,16 +241,16 @@ mod tests {
let result = Split::from_with_query(&item, query);

assert_eq!(result.guid, "guid");
assert_eq!(result.tx_guid, "commodity_guid");
assert_eq!(result.account_guid, "currency_guid");
assert_eq!(result.memo, "currency_guid");
assert_eq!(result.action, "currency_guid");
assert_eq!(result.tx_guid, "tx_guid");
assert_eq!(result.account_guid, "account_guid");
assert_eq!(result.memo, "memo");
assert_eq!(result.action, "action");
assert_eq!(result.reconcile_state, false);
assert_eq!(
result.reconcile_datetime,
NaiveDateTime::parse_from_str("2014-12-24 10:59:00", "%Y-%m-%d %H:%M:%S").ok()
);
assert_eq!(result.lot_guid, "source");
assert_eq!(result.lot_guid, "lot_guid");
#[cfg(not(feature = "decimal"))]
assert_approx_eq!(f64, result.value, 100.0);
#[cfg(feature = "decimal")]
Expand Down Expand Up @@ -332,16 +332,16 @@ mod tests {
let result = Split::from_with_query(&item, query);

assert_eq!(result.guid, "guid");
assert_eq!(result.tx_guid, "commodity_guid");
assert_eq!(result.account_guid, "currency_guid");
assert_eq!(result.memo, "currency_guid");
assert_eq!(result.action, "currency_guid");
assert_eq!(result.tx_guid, "tx_guid");
assert_eq!(result.account_guid, "account_guid");
assert_eq!(result.memo, "memo");
assert_eq!(result.action, "action");
assert_eq!(result.reconcile_state, false);
assert_eq!(
result.reconcile_datetime,
NaiveDateTime::parse_from_str("2014-12-24 10:59:00", "%Y-%m-%d %H:%M:%S").ok()
);
assert_eq!(result.lot_guid, "source");
assert_eq!(result.lot_guid, "lot_guid");
#[cfg(not(feature = "decimal"))]
assert_approx_eq!(f64, result.value, 100.0);
#[cfg(feature = "decimal")]
Expand Down
Loading

0 comments on commit 27f7907

Please sign in to comment.