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

openSUSE / qem-dashboard / 21337412520

25 Jan 2026 06:27PM UTC coverage: 95.336% (-4.7%) from 100.0%
21337412520

Pull #3017

github

web-flow
Merge c1575b507 into bde8733a4
Pull Request #3017: PART 6: generalize make targets and GHA - After #3016

348 of 348 new or added lines in 18 files covered. (100.0%)

50 existing lines in 7 files now uncovered.

1022 of 1072 relevant lines covered (95.34%)

9.33 hits per line

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

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

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

7
use Mojo::JSON qw(true false);
10✔
8

9
sub add_incident_settings ($self) {
3✔
10
  return $self->render(json => {error => 'Incident settings in JSON format required'}, status => 400)
3✔
11
    unless my $settings = $self->req->json;
12

13
  my $jv     = $self->schema('incident_settings');
3✔
14
  my @errors = $jv->validate($settings);
3✔
15
  return $self->render(json => {error => "Incident settings do not match the JSON schema: @errors"}, status => 400)
3✔
16
    if @errors;
17

18
  return $self->render(json => {error => 'Incident not found'}, status => 400)
19
    unless my $incident_id = $self->incidents->id_for_number($settings->{incident});
3✔
20

21
  my $id = $self->settings->add_incident_settings($incident_id, $settings);
2✔
22
  $self->render(json => {message => 'Ok', id => $id});
2✔
23
}
24

25
sub add_update_settings ($self) {
2✔
26
  return $self->render(json => {error => 'Update settings in JSON format required'}, status => 400)
2✔
27
    unless my $settings = $self->req->json;
28

29
  my $jv     = $self->schema('update_settings');
2✔
30
  my @errors = $jv->validate($settings);
2✔
31
  return $self->render(json => {error => "Update settings do not match the JSON schema: @errors"}, status => 400)
2✔
32
    if @errors;
33

34
  my @incident_ids;
2✔
35
  my $incidents = $self->incidents;
2✔
36
  for my $incident (@{$settings->{incidents}}) {
2✔
37
    return $self->render(json => {error => 'Incident not found'}, status => 400)
3✔
38
      unless my $incident_id = $incidents->id_for_number($incident);
39
    push @incident_ids, $incident_id;
2✔
40
  }
41

42
  my $id = $self->settings->add_update_settings(\@incident_ids, $settings);
1✔
43
  $self->render(json => {message => 'Ok', id => $id});
1✔
44
}
45

46
sub get_incident_settings ($self) {
2✔
47
  return $self->render(json => {error => 'Incident not found'}, status => 400)
2✔
48
    unless my $incident_id = $self->incidents->id_for_number($self->param('incident'));
49
  $self->render(json => _fix_booleans($self->settings->get_incident_settings($incident_id)));
1✔
50
}
51

UNCOV
52
sub get_update_settings ($self) {
×
UNCOV
53
  return $self->render(json => {error => 'Incident not found'}, status => 400)
×
54
    unless my $incident_id = $self->incidents->id_for_number($self->param('incident'));
UNCOV
55
  $self->render(json => $self->settings->get_update_settings($incident_id));
×
56
}
57

UNCOV
58
sub search_update_settings ($self) {
×
UNCOV
59
  my $validation = $self->validation;
×
UNCOV
60
  $validation->required('product');
×
UNCOV
61
  $validation->required('arch');
×
UNCOV
62
  $validation->optional('limit')->num;
×
UNCOV
63
  return $self->reply->json_validation_error if $validation->has_error;
×
64

UNCOV
65
  my $product = $validation->param('product');
×
UNCOV
66
  my $arch    = $validation->param('arch');
×
UNCOV
67
  my $limit   = $validation->param('limit');
×
68

UNCOV
69
  $self->render(json => $self->settings->find_update_settings({product => $product, arch => $arch, limit => $limit}));
×
70
}
71

72
sub _fix_booleans ($settings) {
1✔
73
  for my $setting (@$settings) {
1✔
74
    $setting->{withAggregate} = $setting->{withAggregate} ? true : false;
2✔
75
  }
76
  return $settings;
1✔
77
}
78

79
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