/
proj_admin.t
123 lines (110 loc) · 2.93 KB
/
proj_admin.t
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
use strict;
use warnings;
use Test::More;
use Smolder::TestScript;
use Smolder::TestData qw(
base_url
is_smolder_running
create_developer
delete_developers
create_project
delete_projects
create_smoke_report
delete_smoke_reports
create_preference
delete_preferences
);
use Smolder::Mech;
use Smolder::DB::ProjectDeveloper;
use Smolder::Conf;
use File::Spec::Functions qw(catfile);
if (is_smolder_running) {
plan(tests => 21);
} else {
plan(skip_all => 'Smolder not running');
}
my $mech = Smolder::Mech->new();
my $url = base_url() . '/projects';
my $pw = 's3cr3t';
my $dev = create_developer(password => $pw);
my $proj1_id = create_project(public => 0)->id();
# add this $dev to $proj1
my $proj1_dev = Smolder::DB::ProjectDeveloper->create(
{
developer => $dev,
project => $proj1_id,
admin => 1,
preference => create_preference(),
}
);
END {
delete_developers();
delete_projects();
delete_preferences();
}
# 1
use_ok('Smolder::Control::Projects');
# 2..6
# login as a developer
$mech->get("$url/details/$proj1_id");
$mech->content_contains("Unauthorized");
$mech->content_lacks('Welcome');
$mech->login(username => $dev->username, password => $pw);
ok($mech->success);
$mech->get_ok($url);
$mech->content_contains('My Projects');
# 7..21
# admin_settings, process_admin_settings
{
my $proj1 = _get_proj($proj1_id);
my $url = "/app/projects/admin_settings";
my %settings = (
default_arch => 'AMD64',
default_platform => 'Linux FC4',
allow_anon => 0,
);
$proj1->default_platform('Foo');
$proj1->default_arch('Bar');
$proj1->allow_anon(1);
$proj1->update();
# is form pre-filled
$mech->get_ok("$url/$proj1");
$mech->content_contains('Settings');
$mech->content_contains('checked="checked" value="1"');
$mech->content_contains('value="Foo"');
$mech->content_contains('value="Bar"');
# invalid form
ok($mech->form_name('admin_settings_form'));
$mech->set_fields(
default_arch => ('x' x 300),
default_platform => ('x' x 300),
);
$mech->submit();
ok($mech->success);
$mech->content_contains('Default Platform must be under 255 characters');
$mech->content_contains('Default Architecture must be under 255 characters.');
# valid form
ok($mech->form_name('admin_settings_form'));
$mech->set_fields(%settings);
$mech->submit();
ok($mech->success);
$mech->contains_message('successfully updated');
my $proj_id = $proj1->id;
$proj1 = undef;
$proj1 = Smolder::DB::Project->retrieve($proj_id);
foreach (keys %settings) {
is($proj1->$_, $settings{$_});
}
}
sub _get_proj {
my (@ids) = @_;
my @projs;
foreach my $id (@ids) {
push(@projs, Smolder::DB::Project->retrieve($id));
}
if (wantarray) {
return @projs;
} else {
return $projs[0];
}
}