7 use Fumo
::Import
::DataSchema
qw(data_schema);
11 Fumo::Controller::Revision - Catalyst Controller
15 Catalyst Controller representing a revision (changeset).
21 Initialises a new Fumo::Import object.
38 =item Arguments: $data, $schema, $project_name, $branch_name, $revision_name
40 =item Return Value: $schema
44 This method will import $data into the context of the *_name arguments.
49 my ($self, $data, $schema, $project_name, $branch_name,
53 $self->_validate($data);
57 my $branch_rs = $schema->resultset('Project')->find_or_create(
59 )->branches->find_or_create(
61 project
=> $project_name
64 my $revision_rs = $branch_rs->revisions->find_or_create(
65 name
=> $revision_name,
66 project
=> $project_name,
67 branch
=> $branch_name
70 #$revision_rs->files->delete_all;
72 # these are stored for the revision pass_rate
73 my ($total_tests_passed, $total_test_count);
76 for my $file (@
{$data->{files
}}) {
77 my ($file_tests_passed, $file_test_count);
79 # zero count to avoid DBIC error for not-null column
82 my $file_rs = $revision_rs->files->find_or_create({
83 name
=> $file->{name
},
84 project
=> $project_name,
85 branch
=> $branch_name,
86 test_count
=> $file_test_count,
89 # import the tests within a file
90 for my $test (@
{$file->{tests
}}) {
93 if ($test->{directive
} or $test->{status
} eq 'ok') {
97 my $test_rs = $file_rs->tests->find_or_create({
98 name
=> $test->{name
},
99 number
=> $test->{number
},
100 project
=> $project_name,
101 branch
=> $branch_name,
102 revision
=> $revision_name,
103 status
=> $test->{status
},
104 directive
=> ($test->{directive
} or undef)
108 $total_tests_passed += $file_tests_passed;
109 $total_test_count += $file_test_count;
111 # update the file level pass rate
112 if ($file_tests_passed) {
113 my $passed = ($file_tests_passed * 100) / $file_test_count;
114 $file_rs->pass_rate($passed);
120 if ($total_tests_passed) {
121 my $passed = ($total_tests_passed * 100) / $total_test_count;
122 $revision_rs->pass_rate($passed);
124 $revision_rs->update();
136 =item Arguments: $data
138 =item Return Value: none
142 This method will validate the data passed in as $data and throw an
143 exception of the errors if any.
148 my ($self, $data) = @_;
150 my @status = ('ok', 'not ok');
151 my @directive = ('SKIP', 'TODO', '');
153 my $domain = data_schema
(\
@status, \
@directive);
155 my $errors = $domain->inspect($data);
156 die Dumper
$errors if $errors;