From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

#!/usr/bin/perl
use strict;
use Test::More tests => 15 + 1;
use Data::Dumper qw/Dumper/;
use lib 't/lib';
my $pom = Git::Workflow->new();
my $git = Mock::Git::Workflow::Repository->git;
$pom->{git} = $git;
test_branches();
test_tags();
test_config();
test_current();
test_match_commits();
test_release();
test_releases();
test_runner();
test_commit_details();
test_files_from_sha();
test_slurp();
test_spew();
test_settings();
test_save_settings();
test_url_encode();
sub test_branches {
}
sub test_tags {
my @data = (
[
[qw/
1.0
10.0
0.1
v0.1
/],
[qw/
0.1
1.0
10.0
v0.1
/],
]
);
for my $data (@data) {
$git->mock_add($data->[0]);
is_deeply [$pom->tags()], $data->[1], "Get the sorted tags"
or diag Dumper [$pom->tags()], $data->[1];
}
}
sub test_config {
}
sub test_current {
my @data = (
[
'git-simple',
[qw'branch master'],
],
[
'git-tag',
[qw'sha 55d0295a1227f591afc683dd12e43823cd2e404d'],
],
[
'git-branch',
[qw'branch origin/master'],
],
);
for my $data (@data) {
$git->mock_reset();
$git->mock_add('t/data');
$pom->{branches} = {};
$pom->{tags} = [];
$pom->{GIT_DIR} = $data->[0];
my $ans = [$pom->current()];
is_deeply $ans, $data->[1], "Get the current"
or diag Dumper $ans, $data->[1];
}
}
sub test_match_commits {
return;
my @data = (
[
[
[qw{1.0 2.0 3.0}],
[qw{master origin/master}],
],
[qw/tag ./],
[{
branches => {},
sha => undef,
user => 'test user',
email => 'test@example.com',
files => {},
name => '3.0',
time => time,
}],
],
[
[
[qw{master origin/master}],
],
[qw/branch ./],
[{
branches => {},
sha => undef,
user => 'test user',
email => 'test@example.com',
files => {},
name => '3.0',
time => time,
}],
],
);
TODO:
for my $data (@data) {
local $TODO = 'Need to decide if this even needs to exits';
$git->mock_reset();
$git->mock_add(@{ $data->[0] });
$pom->{branches} = {};
$pom->{tags} = [];
my $ans = [$pom->match_commits(@{$data->[1]})];
is_deeply $ans, $data->[2], "Get the commits for $data->[1][0]"
or diag Dumper $ans, $data->[2];
}
}
sub test_release {
my @data = (
[
[
[qw{1.0 10.0 2.0 3.0 ZZZ}],
],
[qw/tag local/, qr/^\d+/],
'10.0',
],
[
[
[map {" $_"} qw{origin/other origin/master}],
],
[qw/branch remote/, qr/master/],
'origin/master',
],
);
for my $data (@data) {
$git->mock_reset();
$git->mock_add(@{ $data->[0] });
$pom->{branches} = {};
$pom->{tags} = [];
my $ans = $pom->release(@{$data->[1]});
is_deeply $ans, $data->[2], "Get the commits for $data->[1][0]"
or diag Dumper $ans, $data->[2];
}
}
sub test_releases {
my @data = (
[
[
[qw/not-release v3.0 v1.0 v1.1 v2.0/],
['1405968782 55d0295a1227f591afc683dd12e43823cd2e404d'],
[map {" $_"} qw{master origin/master}],
],
{ tag => '^v\d+(?:[.]\d+)*$' },
[
{
branches => {
master => 1,
'origin/master' => 1
},
files => {},
user => '',
time => '1405968782',
name => 'v3.0',
email => '',
sha => '55d0295a1227f591afc683dd12e43823cd2e404d'
}
],
],
[
[
[map {" $_"} qw{master origin/master origin/R1.0 origin/R2.0 origin/R3.0}],
['1405968782 55d0295a1227f591afc683dd12e43823cd2e404d'],
],
{ branch => '^origin/R\d+(?:[.]\d+)*$' },
[
{
branches => {
map {$_ => 1} qw{master origin/master origin/R1.0 origin/R2.0 origin/R3.0},
},
files => {},
user => '',
time => '1405968782',
name => 'origin/R3.0',
email => '',
sha => '55d0295a1227f591afc683dd12e43823cd2e404d'
}
],
],
[
[
undef,
[map {" $_"} qw{master origin/master origin/R1.0 origin/R2.0 origin/R3.0}],
['1405968782 55d0295a1227f591afc683dd12e43823cd2e404d'],
],
{ local => 1 },
[
{
branches => {
map {$_ => 1} qw{master origin/master origin/R1.0 origin/R2.0 origin/R3.0},
},
files => {},
user => '',
time => '1405968782',
name => 'master',
email => '',
sha => '55d0295a1227f591afc683dd12e43823cd2e404d'
}
],
],
[
[
'?',
[map {" $_"} qw{master origin/master origin/R1.0 origin/R2.0 origin/R3.0}],
['1405968782 55d0295a1227f591afc683dd12e43823cd2e404d'],
],
{ local => 1 },
[
{
branches => {
map {$_ => 1} qw{master origin/master origin/R1.0 origin/R2.0 origin/R3.0},
},
files => {},
user => '',
time => '1405968782',
name => 'origin/master',
email => '',
sha => '55d0295a1227f591afc683dd12e43823cd2e404d'
}
],
],
);
for my $data (@data) {
$git->mock_reset();
$git->mock_add(@{ $data->[0] });
$pom->{branches} = {};
$pom->{tags} = [];
my $ans = [ $pom->releases(%{$data->[1]}) ];
is_deeply $ans, $data->[2], "Get the releases"
or diag Dumper $ans, $data->[2];
}
}
sub test_runner {
}
sub test_commit_details {
}
sub test_files_from_sha {
my @data = (
[
[ <<'SHOW'
commit 4614a57568bb1889138bfab239d2e82b5b6bc338
Author: Ivan Wills <ivan.wills@gmail.com>
Date: Sun Sep 14 16:54:22 2014 +1000
Added more tests
A t/slurp.txt
M t/workflow.t
SHOW
],
[qw/4614a57568bb1889138bfab239d2e82b5b6bc338/],
{
't/slurp.txt' => 'A',
't/workflow.t' => 'M',
},
],
);
for my $data (@data) {
$git->mock_reset();
$git->mock_add(@{ $data->[0] });
$pom->{branches} = {};
$pom->{tags} = [];
my $ans = $pom->files_from_sha(@{$data->[1]});
is_deeply $ans, $data->[2], "Get the commits for $data->[1][0]"
or diag Dumper $ans, $data->[2];
}
}
sub test_slurp {
is +(scalar $pom->slurp('t/data/slurp.txt')), "true\n", 'Can slurp a file';
}
sub test_spew {
SKIP: {
skip "Can't wright to directory", 1 if !-w 't';
my $file = 't/data/spew.txt';
unlink $file if -f $file;
$pom->spew($file, "test");
is -s $file, 4, 'Wrote to file';
unlink $file;
}
}
sub test_settings {
}
sub test_save_settings {
}
sub test_url_encode {
my @data = (
[qw{? %3f}],
[qw{: :}],
);
for my $data (@data) {
is $pom->_url_encode($data->[0]), $data->[1], "Encode '$data->[0]' correctly"
or diag join "\t", @$data;
}
}