• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

openSUSE / qem-dashboard / 21726550805

05 Feb 2026 08:03PM UTC coverage: 94.177% (-1.8%) from 95.958%
21726550805

Pull #3058

github

web-flow
Merge 38ef5aac0 into 74443710c
Pull Request #3058: PART 9: docs: add documentation for configuration environment variables - After #3024

243 of 277 new or added lines in 12 files covered. (87.73%)

8 existing lines in 3 files now uncovered.

1116 of 1185 relevant lines covered (94.18%)

8.85 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

66.67
/lib/Dashboard/Controller/API/Jobs.pm
1
# Copyright SUSE LLC
2
# SPDX-License-Identifier: GPL-2.0-or-later
3

4
package Dashboard::Controller::API::Jobs;
5
use Mojo::Base 'Mojolicious::Controller', -signatures;
12✔
6

7
sub add ($self) {
6✔
8
  if ($self->stash('openapi.path')) {
6✔
9
    return unless $self->openapi->valid_input;
6✔
10
  }
11
  else {
NEW
12
    return $self->render(json => {error => 'Job in JSON format required'}, status => 400)
×
13
      unless my $job = $self->req->json;
14

NEW
15
    my $jv     = $self->schema('job');
×
NEW
16
    my @errors = $jv->validate($job);
×
NEW
17
    return $self->render(json => {error => "Job does not match the JSON schema: @errors"}, status => 400) if @errors;
×
18
  }
19

20
  my $job   = $self->req->json;
6✔
21
  my $is_id = $job->{incident_settings};
6✔
22
  my $us_id = $job->{update_settings};
6✔
23
  return $self->render(json => {error => "Job needs to reference incident settings or update settings"}, status => 400)
6✔
24
    unless $is_id || $us_id;
25

26
  # Validate references to catch user errors
27
  if ($is_id) {
6✔
28
    return $self->render(json => {error => "Referenced incident settings ($is_id) do not exist"}, status => 400)
6✔
29
      unless $self->settings->incident_settings_exist($is_id);
30
  }
31
  if ($us_id) {
6✔
32
    return $self->render(json => {error => "Referenced update settings ($us_id) do not exist"}, status => 400)
4✔
33
      unless $self->settings->update_settings_exist($us_id);
34
  }
35

36
  $self->jobs->add($job);
6✔
37
  $self->render(json => {message => 'Ok'});
6✔
38
}
39

40
sub incidents ($self) {
2✔
41
  return unless !$self->stash('openapi.path') || $self->openapi->valid_input;
2✔
42
  my $job = $self->jobs->get_incident_settings($self->param('incident_settings'));
2✔
43
  $self->render(json => $job);
2✔
44
}
45

46
sub modify ($self) {
×
NEW
47
  if ($self->stash('openapi.path')) {
×
NEW
48
    return unless $self->openapi->valid_input;
×
49
  }
50
  else {
NEW
51
    return $self->render(json => {error => 'Job data in JSON format required'}, status => 400) unless $self->req->json;
×
52
  }
53

NEW
54
  my $job_id   = $self->param('job_id');
×
NEW
55
  my $job_data = $self->req->json;
×
56
  $self->jobs->modify($job_id, $job_data);
×
57
  $self->render(json => {message => 'Ok'});
×
58
}
59

60
sub _incident ($incidents, $remark) {
6✔
61
  return undef unless my $incident_id = $remark->{incident_id};
6✔
62
  return $incidents->number_for_id($incident_id);
4✔
63
}
64

65
sub show_remarks ($self) {
6✔
66
  return unless !$self->stash('openapi.path') || $self->openapi->valid_input;
6✔
67
  my $openqa_job_id   = $self->param('job_id');
6✔
68
  my $internal_job_id = $self->jobs->internal_job_id($openqa_job_id);
6✔
69
  return $self->render(json => {error => "openQA job ($openqa_job_id) does not exist"}, status => 404)
6✔
70
    unless $internal_job_id;
71

72
  my $incidents = $self->app->incidents;
4✔
73
  my $remarks   = $self->jobs->remarks($internal_job_id);
4✔
74
  my $res       = {remarks => [map { {text => $_->{text}, incident => _incident($incidents, $_)} } $remarks->each]};
4✔
75
  $self->render(json => $res);
4✔
76
}
77

78
sub update_remark ($self) {
6✔
79
  return unless !$self->stash('openapi.path') || $self->openapi->valid_input;
6✔
80
  my $incident_number = $self->param('incident_number');
6✔
81
  my $incident_id     = defined $incident_number ? $self->app->incidents->id_for_number($incident_number) : undef;
6✔
82
  my $openqa_job_id   = $self->param('job_id');
6✔
83
  my $internal_job_id = $self->jobs->internal_job_id($openqa_job_id);
6✔
84
  return $self->render(json => {error => "openQA job ($openqa_job_id) does not exist"}, status => 404)
6✔
85
    unless $internal_job_id;
86
  return $self->render(json => {error => "Incident ($incident_number) does not exist"}, status => 404)
6✔
87
    if defined $incident_number && !$incident_id;
88

89
  $self->jobs->add_remark($internal_job_id, $incident_id, $self->param('text'));
4✔
90
  $self->render(json => {message => 'Ok'});
4✔
91
}
92

93
sub show ($self) {
×
NEW
94
  return unless !$self->stash('openapi.path') || $self->openapi->valid_input;
×
UNCOV
95
  return $self->render(json => {error => 'Job not found'}, status => 400)
×
96
    unless my $job = $self->jobs->get($self->param('job_id'));
97
  $self->render(json => $job);
×
98
}
99

100
sub updates ($self) {
×
NEW
101
  return unless !$self->stash('openapi.path') || $self->openapi->valid_input;
×
102
  my $job = $self->jobs->get_update_settings($self->param('update_settings'));
×
103
  $self->render(json => $job);
×
104
}
105

106
1;
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc