diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
new file mode 100644
index 0000000..51e16b5
--- /dev/null
+++ b/.github/workflows/run-tests.yml
@@ -0,0 +1,40 @@
+name: Tests
+
+on: [push, pull_request]
+
+jobs:
+ test:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: true
+ matrix:
+ os: [ubuntu-latest]
+ php: [8.2, 8.1, 8.0]
+ stability: [prefer-lowest, prefer-stable]
+
+ name: P${{ matrix.php }} - ${{ matrix.stability }} - ${{ matrix.os }}
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v3
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php }}
+ extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick, fileinfo
+ coverage: none
+
+ - name: Setup Graphviz
+ uses: ts-graphviz/setup-graphviz@v1
+
+ - name: Setup problem matchers
+ run: |
+ echo "::add-matcher::${{ runner.tool_cache }}/php.json"
+ echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
+
+ - name: Install dependencies
+ run: composer update --${{ matrix.stability }} --prefer-dist --no-interaction
+
+ - name: Execute tests
+ run: vendor/bin/phpunit
diff --git a/.gitignore b/.gitignore
index 3b99cf4..94a5c09 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,6 @@ composer.lock
docs
vendor
coverage
-.idea
\ No newline at end of file
+.idea
+.phpunit.result.cache
+graph.jpeg
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 84eb0e9..ee623c6 100644
--- a/composer.json
+++ b/composer.json
@@ -16,16 +16,16 @@
}
],
"require": {
- "php": "^7.1|^8.0",
- "doctrine/dbal": "~2.3|^3.3",
- "phpdocumentor/graphviz": "^1.0",
- "nikic/php-parser": "^2.0|^3.0|^4.0"
+ "php": "^8.0",
+ "doctrine/dbal": "^3.3",
+ "illuminate/support": "^9.0|^10.0",
+ "nikic/php-parser": "^2.0|^3.0|^4.0",
+ "phpdocumentor/graphviz": "^1.0"
},
"require-dev": {
- "larapack/dd": "^1.0",
- "orchestra/testbench": "~3.5|~3.6|~3.7|~3.8|^4.0|^7.0",
- "phpunit/phpunit": "^7.0| ^8.0|^9.5.10",
- "spatie/phpunit-snapshot-assertions": "^1.3|^4.2"
+ "orchestra/testbench": "^7.0|^8.0",
+ "phpunit/phpunit": "^9.5.10",
+ "spatie/phpunit-snapshot-assertions": "^4.2"
},
"autoload": {
"psr-4": {
diff --git a/tests/GenerationTest.php b/tests/GenerationTest.php
index 3a3e7d3..18fb320 100644
--- a/tests/GenerationTest.php
+++ b/tests/GenerationTest.php
@@ -56,6 +56,6 @@ public function it_generated_graphviz_in_jpeg_format()
'--format' => 'jpeg'
]);
- $this->assertContains('Wrote diagram to graph.jpeg', Artisan::output());
+ $this->assertStringContainsString('Wrote diagram to graph.jpeg', Artisan::output());
}
}
diff --git a/tests/__snapshots__/GenerationTest__it_generated_graphviz_for_test_models__1.txt b/tests/__snapshots__/GenerationTest__it_generated_graphviz_for_test_models__1.txt
new file mode 100644
index 0000000..d502300
--- /dev/null
+++ b/tests/__snapshots__/GenerationTest__it_generated_graphviz_for_test_models__1.txt
@@ -0,0 +1,141 @@
+Found 4 models.
+Inspecting model relations.
+
+ 1/4 [▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░] 25%
+ 4/4 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%digraph "G" {
+style="filled"
+bgcolor="#F7F7F7"
+fontsize="12"
+labelloc="t"
+concentrate="1"
+splines="polyline"
+overlap=""
+nodesep="1"
+rankdir="LR"
+pad="0.5"
+ranksep="2"
+esep="1"
+fontname="Helvetica Neue"
+beyondcodeerdgeneratortestsmodelsavatar:user_id -> beyondcodeerdgeneratortestsmodelsuser:id [
+label=" "
+xlabel="BelongsTo
+user"
+color="#F77F00"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="crow"
+]
+beyondcodeerdgeneratortestsmodelscomment:user_id -> beyondcodeerdgeneratortestsmodelsuser:id [
+label=" "
+xlabel="BelongsTo
+user"
+color="#F77F00"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="crow"
+]
+beyondcodeerdgeneratortestsmodelspost:user_id -> beyondcodeerdgeneratortestsmodelsuser:id [
+label=" "
+xlabel="BelongsTo
+user"
+color="#F77F00"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="crow"
+]
+beyondcodeerdgeneratortestsmodelspost:id -> beyondcodeerdgeneratortestsmodelscomment:post_id [
+label=" "
+xlabel="HasMany
+comments"
+color="#FCBF49"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="crow"
+arrowtail="none"
+]
+beyondcodeerdgeneratortestsmodelsuser:id -> beyondcodeerdgeneratortestsmodelspost:user_id [
+label=" "
+xlabel="HasMany
+posts"
+color="#FCBF49"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="crow"
+arrowtail="none"
+]
+beyondcodeerdgeneratortestsmodelsuser:id -> beyondcodeerdgeneratortestsmodelsavatar:user_id [
+label=" "
+xlabel="HasOne
+avatar"
+color="#D62828"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="none"
+]
+beyondcodeerdgeneratortestsmodelsuser:id -> comment_user:user_id [
+label=" "
+xlabel="BelongsToMany
+comments"
+color="#003049"
+penwidth="1.8"
+fontname="Helvetica Neue"
+]
+comment_user:comment_id -> beyondcodeerdgeneratortestsmodelscomment:id [
+label=" "
+xlabel="BelongsToMany
+comments"
+color="#003049"
+penwidth="1.8"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelsavatar" [
+label=<
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelscomment" [
+label=<>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelspost" [
+label=<>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelsuser" [
+label=<>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"comment_user" [
+label=<>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+}
diff --git a/tests/__snapshots__/GenerationTest__it_generated_graphviz_for_test_models_with_db_columns__1.txt b/tests/__snapshots__/GenerationTest__it_generated_graphviz_for_test_models_with_db_columns__1.txt
new file mode 100644
index 0000000..dbc0e6c
--- /dev/null
+++ b/tests/__snapshots__/GenerationTest__it_generated_graphviz_for_test_models_with_db_columns__1.txt
@@ -0,0 +1,165 @@
+Found 4 models.
+Inspecting model relations.
+
+ 1/4 [▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░] 25%
+ 4/4 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%digraph "G" {
+style="filled"
+bgcolor="#F7F7F7"
+fontsize="12"
+labelloc="t"
+concentrate="1"
+splines="polyline"
+overlap=""
+nodesep="1"
+rankdir="LR"
+pad="0.5"
+ranksep="2"
+esep="1"
+fontname="Helvetica Neue"
+beyondcodeerdgeneratortestsmodelsavatar:user_id -> beyondcodeerdgeneratortestsmodelsuser:id [
+label=" "
+xlabel="BelongsTo
+user"
+color="#F77F00"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="crow"
+]
+beyondcodeerdgeneratortestsmodelscomment:user_id -> beyondcodeerdgeneratortestsmodelsuser:id [
+label=" "
+xlabel="BelongsTo
+user"
+color="#F77F00"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="crow"
+]
+beyondcodeerdgeneratortestsmodelspost:user_id -> beyondcodeerdgeneratortestsmodelsuser:id [
+label=" "
+xlabel="BelongsTo
+user"
+color="#F77F00"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="crow"
+]
+beyondcodeerdgeneratortestsmodelspost:id -> beyondcodeerdgeneratortestsmodelscomment:post_id [
+label=" "
+xlabel="HasMany
+comments"
+color="#FCBF49"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="crow"
+arrowtail="none"
+]
+beyondcodeerdgeneratortestsmodelsuser:id -> beyondcodeerdgeneratortestsmodelspost:user_id [
+label=" "
+xlabel="HasMany
+posts"
+color="#FCBF49"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="crow"
+arrowtail="none"
+]
+beyondcodeerdgeneratortestsmodelsuser:id -> beyondcodeerdgeneratortestsmodelsavatar:user_id [
+label=" "
+xlabel="HasOne
+avatar"
+color="#D62828"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="none"
+]
+beyondcodeerdgeneratortestsmodelsuser:id -> comment_user:user_id [
+label=" "
+xlabel="BelongsToMany
+comments"
+color="#003049"
+penwidth="1.8"
+fontname="Helvetica Neue"
+]
+comment_user:comment_id -> beyondcodeerdgeneratortestsmodelscomment:id [
+label=" "
+xlabel="BelongsToMany
+comments"
+color="#003049"
+penwidth="1.8"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelsavatar" [
+label=<
+| Avatar |
+| id |
+| url |
+| created_at |
+| updated_at |
+
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelscomment" [
+label=<
+| Comment |
+| id |
+| post_id |
+| body |
+| commentable_type |
+| commentable_id |
+
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelspost" [
+label=<
+| Post |
+| id |
+| user_id |
+| title |
+| body |
+| created_at |
+| updated_at |
+
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelsuser" [
+label=<
+| User |
+| id |
+| avatar_id |
+| name |
+| email |
+| created_at |
+| updated_at |
+
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"comment_user" [
+label=<
+| Pivot |
+| id |
+| comment_id |
+| user_id |
+
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+}
diff --git a/tests/__snapshots__/GenerationTest__it_generated_graphviz_for_test_models_with_db_columns_and_types__1.txt b/tests/__snapshots__/GenerationTest__it_generated_graphviz_for_test_models_with_db_columns_and_types__1.txt
new file mode 100644
index 0000000..74a87de
--- /dev/null
+++ b/tests/__snapshots__/GenerationTest__it_generated_graphviz_for_test_models_with_db_columns_and_types__1.txt
@@ -0,0 +1,165 @@
+Found 4 models.
+Inspecting model relations.
+
+ 1/4 [▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░] 25%
+ 4/4 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%digraph "G" {
+style="filled"
+bgcolor="#F7F7F7"
+fontsize="12"
+labelloc="t"
+concentrate="1"
+splines="polyline"
+overlap=""
+nodesep="1"
+rankdir="LR"
+pad="0.5"
+ranksep="2"
+esep="1"
+fontname="Helvetica Neue"
+beyondcodeerdgeneratortestsmodelsavatar:user_id -> beyondcodeerdgeneratortestsmodelsuser:id [
+label=" "
+xlabel="BelongsTo
+user"
+color="#F77F00"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="crow"
+]
+beyondcodeerdgeneratortestsmodelscomment:user_id -> beyondcodeerdgeneratortestsmodelsuser:id [
+label=" "
+xlabel="BelongsTo
+user"
+color="#F77F00"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="crow"
+]
+beyondcodeerdgeneratortestsmodelspost:user_id -> beyondcodeerdgeneratortestsmodelsuser:id [
+label=" "
+xlabel="BelongsTo
+user"
+color="#F77F00"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="crow"
+]
+beyondcodeerdgeneratortestsmodelspost:id -> beyondcodeerdgeneratortestsmodelscomment:post_id [
+label=" "
+xlabel="HasMany
+comments"
+color="#FCBF49"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="crow"
+arrowtail="none"
+]
+beyondcodeerdgeneratortestsmodelsuser:id -> beyondcodeerdgeneratortestsmodelspost:user_id [
+label=" "
+xlabel="HasMany
+posts"
+color="#FCBF49"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="crow"
+arrowtail="none"
+]
+beyondcodeerdgeneratortestsmodelsuser:id -> beyondcodeerdgeneratortestsmodelsavatar:user_id [
+label=" "
+xlabel="HasOne
+avatar"
+color="#D62828"
+penwidth="1.8"
+fontname="Helvetica Neue"
+dir="both"
+arrowhead="tee"
+arrowtail="none"
+]
+beyondcodeerdgeneratortestsmodelsuser:id -> comment_user:user_id [
+label=" "
+xlabel="BelongsToMany
+comments"
+color="#003049"
+penwidth="1.8"
+fontname="Helvetica Neue"
+]
+comment_user:comment_id -> beyondcodeerdgeneratortestsmodelscomment:id [
+label=" "
+xlabel="BelongsToMany
+comments"
+color="#003049"
+penwidth="1.8"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelsavatar" [
+label=<
+| Avatar |
+| id (integer) |
+| url (string) |
+| created_at (datetime) |
+| updated_at (datetime) |
+
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelscomment" [
+label=<
+| Comment |
+| id (integer) |
+| post_id (integer) |
+| body (string) |
+| commentable_type (string) |
+| commentable_id (integer) |
+
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelspost" [
+label=<
+| Post |
+| id (integer) |
+| user_id (integer) |
+| title (string) |
+| body (text) |
+| created_at (datetime) |
+| updated_at (datetime) |
+
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"beyondcodeerdgeneratortestsmodelsuser" [
+label=<
+| User |
+| id (integer) |
+| avatar_id (integer) |
+| name (string) |
+| email (string) |
+| created_at (datetime) |
+| updated_at (datetime) |
+
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+"comment_user" [
+label=<
+| Pivot |
+| id (integer) |
+| comment_id (integer) |
+| user_id (integer) |
+
>
+margin="0"
+shape="rectangle"
+fontname="Helvetica Neue"
+]
+}