From 898b1af4a6e0fb3f928ac4453006d918c0ecc6d8 Mon Sep 17 00:00:00 2001 From: sergiotarxz Date: Fri, 25 Mar 2022 02:12:32 +0100 Subject: [PATCH] Tests improvements. release-dao integration test, fixing broken docs, fixing broken test at t/00008-application-dao.t --- db_tests/00004-release-dao.t | 57 ++++++++++++ doc/index.html | 12 +++ doc/lib/Peace/DAO/Release.pm.html | 89 +++++++++++++++++++ doc/lib/Peace/Model/Application.pm.html | 9 ++ doc/lib/Peace/Model/Release.pm.html | 2 +- .../Peace/Test/Mock/Model/Application.pm.html | 57 ++++++++++++ .../Peace/Test/Mock/Model/Developer.pm.html | 57 ++++++++++++ doc/lib/Peace/Test/Mock/Model/Release.pm.html | 57 ++++++++++++ lib/Peace/DAO/Application.pm | 1 + lib/Peace/DAO/Release.pm | 8 +- lib/Peace/Model/Release.pm | 3 +- lib/Peace/Test/Mock/Model/Application.pm | 11 ++- lib/Peace/Test/Mock/Model/Developer.pm | 6 +- lib/Peace/Test/Mock/Model/Release.pm | 56 ++++++++++++ t/00008-application-dao.t | 2 +- 15 files changed, 416 insertions(+), 11 deletions(-) create mode 100644 db_tests/00004-release-dao.t create mode 100644 doc/lib/Peace/DAO/Release.pm.html create mode 100644 doc/lib/Peace/Test/Mock/Model/Application.pm.html create mode 100644 doc/lib/Peace/Test/Mock/Model/Developer.pm.html create mode 100644 doc/lib/Peace/Test/Mock/Model/Release.pm.html create mode 100644 lib/Peace/Test/Mock/Model/Release.pm diff --git a/db_tests/00004-release-dao.t b/db_tests/00004-release-dao.t new file mode 100644 index 0000000..5ad0191 --- /dev/null +++ b/db_tests/00004-release-dao.t @@ -0,0 +1,57 @@ +#!/usr/bin/env perl + +use v5.30.0; + +use strict; +use warnings; + +use Data::Dumper; + +use Test::Most tests => 2; + +use DateTime; + +use Peace; +use Peace::DB; +use Peace::DAO::Developer; +use Peace::DAO::Application; +use Peace::DAO::Release; + +use Peace::Test::Mock::Model::Developer; +use Peace::Test::Mock::Model::Application; +use Peace::Test::Mock::Model::Release; + +{ + ## GIVEN + my $current_date = DateTime->now; + my $peace = Peace->new; + my $home = $ENV{HOME}; + my $config = + $peace->plugin( + JSONConfig => { file => "$home/.config/peace/peace.conf" } ); + my $dbh = Peace::DB->dbh( config => $config ); + + my $developer = Peace::Test::Mock::Model::Developer->new; + my $developer_dao = Peace::DAO::Developer->new( dbh => $dbh ); + + $developer_dao->create( developer => $developer ); + + my $application = Peace::Test::Mock::Model::Application->new; + $application->developer($developer); + + my $application_dao = Peace::DAO::Application->new( dbh => $dbh ); + + $application_dao->create( application => $application ); + + my $release = Peace::Test::Mock::Model::Release->new; + $release->application($application); + + my $release_dao = Peace::DAO::Release->new( dbh => $dbh ); + + ## WHEN + $release_dao->create( release => $release ); + + ## THEN + ok $release->uuid, 'Generated uuid.'; + ok $release->date_creation > $current_date, 'The date is recent.'; +} diff --git a/doc/index.html b/doc/index.html index f3737f2..acb96b7 100644 --- a/doc/index.html +++ b/doc/index.html @@ -20,6 +20,9 @@
  • Peace::DAO::Developer
  • +
  • + Peace::DAO::Release +
  • Peace::DB
  • @@ -35,6 +38,15 @@
  • Peace::Model::Release
  • +
  • + Peace::Test::Mock::Model::Application +
  • +
  • + Peace::Test::Mock::Model::Developer +
  • +
  • + Peace::Test::Mock::Model::Release +
  • diff --git a/doc/lib/Peace/DAO/Release.pm.html b/doc/lib/Peace/DAO/Release.pm.html new file mode 100644 index 0000000..b833888 --- /dev/null +++ b/doc/lib/Peace/DAO/Release.pm.html @@ -0,0 +1,89 @@ + + + + +Peace::DAO::Release - The database access object of releases. + + + + + + + + + + +

    NAME

    + +

    Peace::DAO::Release - The database access object of releases.

    + +

    SYNOPSIS

    + +
    my $release_dao = Peace::DAO::Release->new(
    +  dbh => $dbh
    +);
    +
    +$release_dao->create( release => $release );
    +
    +my $release = $release_dao->recover_by_uuid( uuid => $uuid );
    + +

    DESCRIPTION

    + +

    Peace::DAO::Release allows you to do database operations over Peace::Model::Release objects.

    + +

    INSTANCE METHODS

    + +

    Peace::DAO::Release implements the following intance methods:

    + +

    new

    + +
    my $release_dao = Peace::DAO::Release->new(
    +  dbh => $dbh
    +)
    + +

    Instances a Peace::DAO::Release object.

    + +

    METHODS

    + +

    Peace::DAO::Release implements the following methods:

    + +

    recover_by_uuid

    + +
    my $release = $release_dao->recover_by_uuid(
    +  uuid => $uuid
    +);
    + +

    Recovers a Peace::Model::Release by uuid.

    + +

    create

    + +
    $release_dao->create( release => $release );
    + +

    Creates row in the table releases from a Peace::Model::Release

    + +

    SEE ALSO

    + +

    Peace::Model::Release

    + + + + + + + diff --git a/doc/lib/Peace/Model/Application.pm.html b/doc/lib/Peace/Model/Application.pm.html index 1c588fc..c0c695b 100644 --- a/doc/lib/Peace/Model/Application.pm.html +++ b/doc/lib/Peace/Model/Application.pm.html @@ -31,6 +31,7 @@
  • price
  • git_repo
  • flatpak_builder_file
  • +
  • flatpak_repo
  • verified
  • @@ -155,6 +156,14 @@ $application->flatpak_builder_file($flatpak_builder_file);

    Allows to retrieve and set the application's flatpak_builder_file.

    +

    flatpak_repo

    + +
    my $flatpak_repo = $application->flatpak_repo;
    +
    +$application->flatpak_repo($flatpak_repo);
    + +

    Allows to retrieve and set the application's flatpak_repo.

    +

    verified

    my $verified = $application->verified;
    diff --git a/doc/lib/Peace/Model/Release.pm.html b/doc/lib/Peace/Model/Release.pm.html
    index 5388eb6..62e8a4c 100644
    --- a/doc/lib/Peace/Model/Release.pm.html
    +++ b/doc/lib/Peace/Model/Release.pm.html
    @@ -110,7 +110,7 @@ $release->name($name);

    SEE ALSO

    -

    Peace::Model::Application, Peace::DAO::Release

    +

    Peace::Model::Application, Peace::DAO::Release

    diff --git a/doc/lib/Peace/Test/Mock/Model/Application.pm.html b/doc/lib/Peace/Test/Mock/Model/Application.pm.html new file mode 100644 index 0000000..9ce2577 --- /dev/null +++ b/doc/lib/Peace/Test/Mock/Model/Application.pm.html @@ -0,0 +1,57 @@ + + + + +Peace::Test::Mock::Model::Application - Mock object for Peace::Model::Application. + + + + + + + + + + +

    NAME

    + +

    Peace::Test::Mock::Model::Application - Mock object for Peace::Model::Application.

    + +

    SYNOPSIS

    + +
    my $application = Peace::Test::Mock::Model::Application->new;
    + +

    DESCRIPTION

    + +

    Peace::Test::Mock::Model::Application aims to reduce repeated code which doesn't bring new things to tests by avoiding to add long lines in order to create a Peace::Model::Application object on a unrelated test by providing a stub one already created object.

    + +

    INSTANCE METHODS

    + +

    Peace::Test::Mock::Model::Application implements the following instance methods:

    + +

    new

    + +
    my $application = Peace::Test::Mock::Model::Application->new;
    + +

    Returns a mock Peace::Model::Application object.

    + +

    SEE ALSO

    + +

    Peace::Model::Application.

    + + + + + + + diff --git a/doc/lib/Peace/Test/Mock/Model/Developer.pm.html b/doc/lib/Peace/Test/Mock/Model/Developer.pm.html new file mode 100644 index 0000000..fc66e8a --- /dev/null +++ b/doc/lib/Peace/Test/Mock/Model/Developer.pm.html @@ -0,0 +1,57 @@ + + + + +Peace::Test::Mock::Model::Developer - Mock object for Peace::Model::Developer. + + + + + + + + + + +

    NAME

    + +

    Peace::Test::Mock::Model::Developer - Mock object for Peace::Model::Developer.

    + +

    SYNOPSIS

    + +
    my $developer = Peace::Test::Mock::Model::Developer->new;
    + +

    DESCRIPTION

    + +

    Peace::Test::Mock::Model::Developer aims to reduce repeated code which doesn't bring new things to tests by avoiding to add long lines in order to create a Peace::Model::Developer object on a unrelated test by providing a stub one already created object.

    + +

    INSTANCE METHODS

    + +

    Peace::Test::Mock::Model::Developer implements the following instance methods:

    + +

    new

    + +
    my $developer = Peace::Test::Mock::Model::Developer->new;
    + +

    Returns a mock Peace::Model::Developer object.

    + +

    SEE ALSO

    + +

    Peace::Model::Developer

    + + + + + + + diff --git a/doc/lib/Peace/Test/Mock/Model/Release.pm.html b/doc/lib/Peace/Test/Mock/Model/Release.pm.html new file mode 100644 index 0000000..e871640 --- /dev/null +++ b/doc/lib/Peace/Test/Mock/Model/Release.pm.html @@ -0,0 +1,57 @@ + + + + +Peace::Test::Mock::Model::Release - Mock object for Peace::Model::Release. + + + + + + + + + + +

    NAME

    + +

    Peace::Test::Mock::Model::Release - Mock object for Peace::Model::Release.

    + +

    SYNOPSIS

    + +
    my $release = Peace::Test::Mock::Model::Release->new;
    + +

    DESCRIPTION

    + +

    Peace::Test::Mock::Model::Release aims to reduce repeated code which doesn't bring new things to tests by avoiding to add long lines in order to create a Peace::Model::Release object on a unrelated test by providing a stub one already created object.

    + +

    INSTANCE METHODS

    + +

    Peace::Test::Mock::Model::Release implements the following instance methods:

    + +

    new

    + +
    my $release = Peace::Test::Mock::Model::Release->new;
    + +

    Returns a mock Peace::Model::Release object.

    + +

    SEE ALSO

    + +

    Peace::Model::Release

    + + + + + + + diff --git a/lib/Peace/DAO/Application.pm b/lib/Peace/DAO/Application.pm index 5fc6c81..48a811f 100644 --- a/lib/Peace/DAO/Application.pm +++ b/lib/Peace/DAO/Application.pm @@ -6,6 +6,7 @@ use strict; use warnings; use Data::Dumper; +use Carp qw/cluck/; use Params::ValidationCompiler qw/validation_for/; use Types::Standard qw/HasMethods InstanceOf Str HashRef/; diff --git a/lib/Peace/DAO/Release.pm b/lib/Peace/DAO/Release.pm index 5d8e23b..d3b4362 100644 --- a/lib/Peace/DAO/Release.pm +++ b/lib/Peace/DAO/Release.pm @@ -37,7 +37,7 @@ use Types::Standard qw/HasMethods InstanceOf Str HashRef/; sub create { my $self = shift; my %params = $validator->(@_); - my $application = $params{release}; + my $release = $params{release}; my $dbh = $self->_dbh; my $insert = <<'EOF'; @@ -87,11 +87,11 @@ EOF { my $validator = validation_for( params => [ { type => HashRef }, ] ); - sub _select_result_to_application { + sub _select_result_to_release { my $self = shift; my ($result) = $validator->(@_); if ( exists $result->{application} ) { - $result->{developer_uuid} = delete $result->{application}; + $result->{application_uuid} = delete $result->{application}; $result->{dbh} = $self->_dbh; } if ( exists $result->{date_creation} ) { @@ -164,3 +164,5 @@ L =head1 SEE ALSO L + +=cut diff --git a/lib/Peace/Model/Release.pm b/lib/Peace/Model/Release.pm index 8f2f6f4..97b357e 100644 --- a/lib/Peace/Model/Release.pm +++ b/lib/Peace/Model/Release.pm @@ -82,7 +82,7 @@ sub _dbh { my ($new_application) = $validator->(@_); $self->{application} = $new_application; } - unless ( exists $self->{developer} ) { + unless ( exists $self->{application} ) { my $application_uuid = $self->{application_uuid}; my $application_dao = Peace::DAO::Application->new( dbh => $self->_dbh ); @@ -130,7 +130,6 @@ sub _dbh { } 1; - =encoding utf8 =head1 NAME diff --git a/lib/Peace/Test/Mock/Model/Application.pm b/lib/Peace/Test/Mock/Model/Application.pm index d3f9071..47fe620 100644 --- a/lib/Peace/Test/Mock/Model/Application.pm +++ b/lib/Peace/Test/Mock/Model/Application.pm @@ -25,12 +25,15 @@ sub new { ); } 1; - =encoding utf8 =head1 NAME -Peace::Test::Mock::Model::Application - Mock object for L. +Peace::Test::Mock::Model::Application - Mock object for Peace::Model::Application. + +=head1 SYNOPSIS + + my $application = Peace::Test::Mock::Model::Application->new; =head1 DESCRIPTION @@ -52,4 +55,6 @@ Returns a mock L object. =head1 SEE ALSO -L +L. + +=cut diff --git a/lib/Peace/Test/Mock/Model/Developer.pm b/lib/Peace/Test/Mock/Model/Developer.pm index a764adf..c11eeae 100644 --- a/lib/Peace/Test/Mock/Model/Developer.pm +++ b/lib/Peace/Test/Mock/Model/Developer.pm @@ -26,7 +26,11 @@ sub new { =head1 NAME -Peace::Test::Mock::Model::Developer - Mock object for L. +Peace::Test::Mock::Model::Developer - Mock object for Peace::Model::Developer. + +=head1 SYNOPSIS + + my $developer = Peace::Test::Mock::Model::Developer->new; =head1 DESCRIPTION diff --git a/lib/Peace/Test/Mock/Model/Release.pm b/lib/Peace/Test/Mock/Model/Release.pm new file mode 100644 index 0000000..d0ab502 --- /dev/null +++ b/lib/Peace/Test/Mock/Model/Release.pm @@ -0,0 +1,56 @@ +package Peace::Test::Mock::Model::Release; + +use v5.30.0; + +use strict; +use warnings; + +use DBI; + +use Peace::Model::Release; + +use Peace::Test::Mock::Model::Application; + +sub new { + my $class = shift; + return Peace::Model::Release->new( + application => Peace::Test::Mock::Model::Application->new, + tag => 'v0.0.1', + name => '0.0.1', + dbh => DBI->connect('dbi:Mock:'), + ); +} +1; +=encoding utf8 + +=head1 NAME + +Peace::Test::Mock::Model::Release - Mock object for Peace::Model::Release. + +=head1 SYNOPSIS + + my $release = Peace::Test::Mock::Model::Release->new; + +=head1 DESCRIPTION + +Peace::Test::Mock::Model::Release aims to reduce repeated code which +doesn't bring new things to tests by avoiding to add long lines +in order to create a L object on a +unrelated test by providing a stub one already created object. + +=head1 INSTANCE METHODS + +Peace::Test::Mock::Model::Release implements the following instance +methods: + +=head2 new + + my $release = Peace::Test::Mock::Model::Release->new; + +Returns a mock L object. + +=head1 SEE ALSO + +L + +=cut diff --git a/t/00008-application-dao.t b/t/00008-application-dao.t index 7ff8959..6d3ac4b 100644 --- a/t/00008-application-dao.t +++ b/t/00008-application-dao.t @@ -24,7 +24,7 @@ INSERT INTO applications (name, description, url, developer, price, git_repo, flatpak_builder_file, flatpak_repo, verified) -VALUES (?, ?, ?, ?, ?, ?, ?, ?) +VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING uuid; EOF