Tests improvements.

release-dao integration test, fixing broken docs,
fixing broken test at t/00008-application-dao.t
This commit is contained in:
sergiotarxz 2022-03-25 02:12:32 +01:00
parent 21cf5e1b85
commit 898b1af4a6
15 changed files with 416 additions and 11 deletions

View File

@ -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.';
}

View File

@ -20,6 +20,9 @@
<li>
<a href="lib/Peace/DAO/Developer.pm.html">Peace::DAO::Developer</a>
</li>
<li>
<a href="lib/Peace/DAO/Release.pm.html">Peace::DAO::Release</a>
</li>
<li>
<a href="lib/Peace/DB.pm.html">Peace::DB</a>
</li>
@ -35,6 +38,15 @@
<li>
<a href="lib/Peace/Model/Release.pm.html">Peace::Model::Release</a>
</li>
<li>
<a href="lib/Peace/Test/Mock/Model/Application.pm.html">Peace::Test::Mock::Model::Application</a>
</li>
<li>
<a href="lib/Peace/Test/Mock/Model/Developer.pm.html">Peace::Test::Mock::Model::Developer</a>
</li>
<li>
<a href="lib/Peace/Test/Mock/Model/Release.pm.html">Peace::Test::Mock::Model::Release</a>
</li>
</ul>
</body>
</html>

View File

@ -0,0 +1,89 @@
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Peace::DAO::Release - The database access object of releases.</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<link href="mailto:Alpine@build-edge-aarch64.nonet" rev="made" />
</head>
<body>
<ul id="index">
<li><a href="#NAME">NAME</a></li>
<li><a href="#SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#DESCRIPTION">DESCRIPTION</a></li>
<li><a href="#INSTANCE-METHODS">INSTANCE METHODS</a>
<ul>
<li><a href="#new">new</a></li>
</ul>
</li>
<li><a href="#METHODS">METHODS</a>
<ul>
<li><a href="#recover_by_uuid">recover_by_uuid</a></li>
<li><a href="#create">create</a></li>
</ul>
</li>
<li><a href="#SEE-ALSO">SEE ALSO</a></li>
</ul>
<h1 id="NAME">NAME</h1>
<p>Peace::DAO::Release - The database access object of releases.</p>
<h1 id="SYNOPSIS">SYNOPSIS</h1>
<pre><code>my $release_dao = Peace::DAO::Release-&gt;new(
dbh =&gt; $dbh
);
$release_dao-&gt;create( release =&gt; $release );
my $release = $release_dao-&gt;recover_by_uuid( uuid =&gt; $uuid );</code></pre>
<h1 id="DESCRIPTION">DESCRIPTION</h1>
<p>Peace::DAO::Release allows you to do database operations over <a href="../Model/Release.pm.html">Peace::Model::Release</a> objects.</p>
<h1 id="INSTANCE-METHODS">INSTANCE METHODS</h1>
<p>Peace::DAO::Release implements the following intance methods:</p>
<h2 id="new">new</h2>
<pre><code>my $release_dao = Peace::DAO::Release-&gt;new(
dbh =&gt; $dbh
)</code></pre>
<p>Instances a Peace::DAO::Release object.</p>
<h1 id="METHODS">METHODS</h1>
<p>Peace::DAO::Release implements the following methods:</p>
<h2 id="recover_by_uuid">recover_by_uuid</h2>
<pre><code>my $release = $release_dao-&gt;recover_by_uuid(
uuid =&gt; $uuid
);</code></pre>
<p>Recovers a <a href="../Model/Release.pm.html">Peace::Model::Release</a> by uuid.</p>
<h2 id="create">create</h2>
<pre><code>$release_dao-&gt;create( release =&gt; $release );</code></pre>
<p>Creates row in the table releases from a <a href="../Model/Release.pm.html">Peace::Model::Release</a></p>
<h1 id="SEE-ALSO">SEE ALSO</h1>
<p><a href="../Model/Release.pm.html">Peace::Model::Release</a></p>
</body>
</html>

View File

@ -31,6 +31,7 @@
<li><a href="#price">price</a></li>
<li><a href="#git_repo">git_repo</a></li>
<li><a href="#flatpak_builder_file">flatpak_builder_file</a></li>
<li><a href="#flatpak_repo">flatpak_repo</a></li>
<li><a href="#verified">verified</a></li>
</ul>
</li>
@ -155,6 +156,14 @@ $application-&gt;flatpak_builder_file($flatpak_builder_file);</code></pre>
<p>Allows to retrieve and set the application&#39;s flatpak_builder_file.</p>
<h2 id="flatpak_repo">flatpak_repo</h2>
<pre><code>my $flatpak_repo = $application-&gt;flatpak_repo;
$application-&gt;flatpak_repo($flatpak_repo);</code></pre>
<p>Allows to retrieve and set the application&#39;s flatpak_repo.</p>
<h2 id="verified">verified</h2>
<pre><code>my $verified = $application-&gt;verified;

View File

@ -110,7 +110,7 @@ $release-&gt;name($name);</code></pre>
<h1 id="SEE-ALSO">SEE ALSO</h1>
<p><a href="Application.pm.html">Peace::Model::Application</a>, <a href="https://metacpan.org/pod/Peace::DAO::Release">Peace::DAO::Release</a></p>
<p><a href="Application.pm.html">Peace::Model::Application</a>, <a href="../DAO/Release.pm.html">Peace::DAO::Release</a></p>
</body>

View File

@ -0,0 +1,57 @@
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Peace::Test::Mock::Model::Application - Mock object for Peace::Model::Application.</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<link href="mailto:Alpine@build-edge-aarch64.nonet" rev="made" />
</head>
<body>
<ul id="index">
<li><a href="#NAME">NAME</a></li>
<li><a href="#SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#DESCRIPTION">DESCRIPTION</a></li>
<li><a href="#INSTANCE-METHODS">INSTANCE METHODS</a>
<ul>
<li><a href="#new">new</a></li>
</ul>
</li>
<li><a href="#SEE-ALSO">SEE ALSO</a></li>
</ul>
<h1 id="NAME">NAME</h1>
<p>Peace::Test::Mock::Model::Application - Mock object for Peace::Model::Application.</p>
<h1 id="SYNOPSIS">SYNOPSIS</h1>
<pre><code>my $application = Peace::Test::Mock::Model::Application-&gt;new;</code></pre>
<h1 id="DESCRIPTION">DESCRIPTION</h1>
<p>Peace::Test::Mock::Model::Application aims to reduce repeated code which doesn&#39;t bring new things to tests by avoiding to add long lines in order to create a <a href="../../../Model/Application.pm.html">Peace::Model::Application</a> object on a unrelated test by providing a stub one already created object.</p>
<h1 id="INSTANCE-METHODS">INSTANCE METHODS</h1>
<p>Peace::Test::Mock::Model::Application implements the following instance methods:</p>
<h2 id="new">new</h2>
<pre><code>my $application = Peace::Test::Mock::Model::Application-&gt;new;</code></pre>
<p>Returns a mock <a href="../../../Model/Application.pm.html">Peace::Model::Application</a> object.</p>
<h1 id="SEE-ALSO">SEE ALSO</h1>
<p><a href="../../../Model/Application.pm.html">Peace::Model::Application</a>.</p>
</body>
</html>

View File

@ -0,0 +1,57 @@
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Peace::Test::Mock::Model::Developer - Mock object for Peace::Model::Developer.</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<link href="mailto:Alpine@build-edge-aarch64.nonet" rev="made" />
</head>
<body>
<ul id="index">
<li><a href="#NAME">NAME</a></li>
<li><a href="#SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#DESCRIPTION">DESCRIPTION</a></li>
<li><a href="#INSTANCE-METHODS">INSTANCE METHODS</a>
<ul>
<li><a href="#new">new</a></li>
</ul>
</li>
<li><a href="#SEE-ALSO">SEE ALSO</a></li>
</ul>
<h1 id="NAME">NAME</h1>
<p>Peace::Test::Mock::Model::Developer - Mock object for Peace::Model::Developer.</p>
<h1 id="SYNOPSIS">SYNOPSIS</h1>
<pre><code>my $developer = Peace::Test::Mock::Model::Developer-&gt;new;</code></pre>
<h1 id="DESCRIPTION">DESCRIPTION</h1>
<p>Peace::Test::Mock::Model::Developer aims to reduce repeated code which doesn&#39;t bring new things to tests by avoiding to add long lines in order to create a <a href="../../../Model/Developer.pm.html">Peace::Model::Developer</a> object on a unrelated test by providing a stub one already created object.</p>
<h1 id="INSTANCE-METHODS">INSTANCE METHODS</h1>
<p>Peace::Test::Mock::Model::Developer implements the following instance methods:</p>
<h2 id="new">new</h2>
<pre><code>my $developer = Peace::Test::Mock::Model::Developer-&gt;new;</code></pre>
<p>Returns a mock <a href="../../../Model/Developer.pm.html">Peace::Model::Developer</a> object.</p>
<h1 id="SEE-ALSO">SEE ALSO</h1>
<p><a href="../../../Model/Developer.pm.html">Peace::Model::Developer</a></p>
</body>
</html>

View File

@ -0,0 +1,57 @@
<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Peace::Test::Mock::Model::Release - Mock object for Peace::Model::Release.</title>
<meta content="text/html; charset=utf-8" http-equiv="content-type" />
<link href="mailto:Alpine@build-edge-aarch64.nonet" rev="made" />
</head>
<body>
<ul id="index">
<li><a href="#NAME">NAME</a></li>
<li><a href="#SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#DESCRIPTION">DESCRIPTION</a></li>
<li><a href="#INSTANCE-METHODS">INSTANCE METHODS</a>
<ul>
<li><a href="#new">new</a></li>
</ul>
</li>
<li><a href="#SEE-ALSO">SEE ALSO</a></li>
</ul>
<h1 id="NAME">NAME</h1>
<p>Peace::Test::Mock::Model::Release - Mock object for Peace::Model::Release.</p>
<h1 id="SYNOPSIS">SYNOPSIS</h1>
<pre><code>my $release = Peace::Test::Mock::Model::Release-&gt;new;</code></pre>
<h1 id="DESCRIPTION">DESCRIPTION</h1>
<p>Peace::Test::Mock::Model::Release aims to reduce repeated code which doesn&#39;t bring new things to tests by avoiding to add long lines in order to create a <a href="../../../Model/Release.pm.html">Peace::Model::Release</a> object on a unrelated test by providing a stub one already created object.</p>
<h1 id="INSTANCE-METHODS">INSTANCE METHODS</h1>
<p>Peace::Test::Mock::Model::Release implements the following instance methods:</p>
<h2 id="new">new</h2>
<pre><code>my $release = Peace::Test::Mock::Model::Release-&gt;new;</code></pre>
<p>Returns a mock <a href="../../../Model/Release.pm.html">Peace::Model::Release</a> object.</p>
<h1 id="SEE-ALSO">SEE ALSO</h1>
<p><a href="../../../Model/Release.pm.html">Peace::Model::Release</a></p>
</body>
</html>

View File

@ -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/;

View File

@ -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<Peace::Model::Release>
=head1 SEE ALSO
L<Peace::Model::Release>
=cut

View File

@ -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

View File

@ -25,12 +25,15 @@ sub new {
);
}
1;
=encoding utf8
=head1 NAME
Peace::Test::Mock::Model::Application - Mock object for L<Peace::Model::Application>.
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<Peace::Model::Application> object.
=head1 SEE ALSO
L<Peace::Model::Application>
L<Peace::Model::Application>.
=cut

View File

@ -26,7 +26,11 @@ sub new {
=head1 NAME
Peace::Test::Mock::Model::Developer - Mock object for L<Peace::Model::Developer>.
Peace::Test::Mock::Model::Developer - Mock object for Peace::Model::Developer.
=head1 SYNOPSIS
my $developer = Peace::Test::Mock::Model::Developer->new;
=head1 DESCRIPTION

View File

@ -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<Peace::Model::Release> 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<Peace::Model::Release> object.
=head1 SEE ALSO
L<Peace::Model::Release>
=cut

View File

@ -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