File: basic.t

package info (click to toggle)
libdist-zilla-plugin-githubmeta-perl 0.46-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 192 kB
  • ctags: 7
  • sloc: sh: 242; perl: 155; makefile: 2
file content (143 lines) | stat: -rw-r--r-- 3,202 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
use strict;
use warnings;
use Test::More 0.88;
use IPC::Cmd qw[can_run];

unless ( can_run('git') ) {
  ok('No git, no dice');
  done_testing;
  exit 0;
}

{
  my ($gitver) = `git version`;
  my ($ver) = $gitver =~ m!git version ([0-9.]+)!;
  chomp $gitver;
  require version;
  if ( version->parse( $ver ) < version->parse('1.5.0') ) {
    diag("$gitver is too low, 1.5.0 or above is required");
    ok("$gitver is too low, 1.5.0 or above is required");
    done_testing;
    exit 0;
  }
  diag("Using $gitver\n");
}

use lib 't/lib';

use Test::Deep qw(all ignore superhashof);
use Test::DZil;

test_plugin("simplest case, ssh url" => {
  plugin => { },
  git    => { origin => 'git@github.com:example/Example-Repo.git' },
});

test_plugin("https url" => {
  plugin => { },
  git    => { origin => 'https://github.com:example/Example-Repo.git' },
});

test_plugin("SSH url, from a github-keygen user" => {
  plugin => { },
  git    => { origin => 'example.github.com:example/Example-Repo.git' },
});

test_plugin("use a non-default remote" => {
  plugin => { remote => 'github' },
  git    => {
    github => 'git@github.com:example/Example-Repo.git',
    origin => 'rjbs@git.manxome.org/zork/Gnusto.git',
  },
});

test_plugin("override the user" => {
  plugin => { user => 'example' },
  git    => { origin => 'git@github.com:rjbs/Example-Repo.git' },
});

test_plugin("override the repo" => {
  plugin => { repo => 'Example-Repo' },
  git    => { origin => 'git@github.com:example/example--repo.git' },
});

test_plugin("turn on issues" => {
  plugin => { issues => 1 },
  git    => { origin => 'git@github.com:example/Example-Repo.git' },
  resources => {
    bugtracker => { web => 'https://github.com/example/Example-Repo/issues' },
  },
});

done_testing;

#############

my %FMT;

BEGIN {
$FMT{CONFIG} = <<'END_GITCONFIG';
[core]
  repositoryformatversion = 0
  filemode = true
  bare = false
  logallrefupdates = true
%s
END_GITCONFIG

$FMT{REMOTE} = <<'END_REMOTE';
[remote "%s"]
  url = %s
END_REMOTE
}

sub git_config_for {
  my ($config) = @_;

  my $remote_config =
    join qq{\n}, map {; sprintf $FMT{REMOTE}, $_, $config->{$_} } keys %$config;

  return sprintf $FMT{CONFIG}, $remote_config;
}

sub test_plugin {
  my ($desc, $test) = @_;
  my $gitconfig = git_config_for($test);

  my $tzil = Builder->from_config(
    { dist_root => 'corpus/GHM-Sample' },
    {
      add_files => {
        'source/dist.ini'    => simple_ini(
          'MetaJSON',
          [ GithubMeta => $test->{plugin} ],
        ),
        'source/.git/config' => git_config_for($test->{git}),
      },
      also_copy => {
        'corpus/git' => 'source/.git',
      },
    },
  );

  $tzil->build;

  is_json(
    $tzil->slurp_file('build/META.json'),
    all(
      $test->{meta} || ignore(),
      superhashof({
        resources => {
          homepage   => 'https://github.com/example/Example-Repo',
          repository => {
            type => 'git',
            url => 'https://github.com/example/Example-Repo.git',
            web => 'https://github.com/example/Example-Repo',
          },
          $test->{resources} ? %{ $test->{resources} } : (),
        },
      }),
    ),
    $desc,
  );
}