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=< + +
Avatar
> +margin="0" +shape="rectangle" +fontname="Helvetica Neue" +] +"beyondcodeerdgeneratortestsmodelscomment" [ +label=< + +
Comment
> +margin="0" +shape="rectangle" +fontname="Helvetica Neue" +] +"beyondcodeerdgeneratortestsmodelspost" [ +label=< + +
Post
> +margin="0" +shape="rectangle" +fontname="Helvetica Neue" +] +"beyondcodeerdgeneratortestsmodelsuser" [ +label=< + +
User
> +margin="0" +shape="rectangle" +fontname="Helvetica Neue" +] +"comment_user" [ +label=< + +
Pivot
> +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" +] +}