Merge pull request #948 from DeterminateSystems/known-inputs

Jobset: list known inputs in invalid input type response
This commit is contained in:
Graham Christensen 2021-04-29 21:45:16 -04:00 committed by GitHub
commit 6047b1dd04
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 49 additions and 14 deletions

View file

@ -688,18 +688,6 @@ components:
'type': 'type':
description: The type of this input description: The type of this input
type: string type: string
enum:
- bzr
- bzr-checkout
- bitbucketpulls
- darcs
- git
- githubpulls
- gitlabpulls
- hg
- path
- svn
- svn-checkout
revision: revision:
nullable: true nullable: true
description: A Git/Mercurial commit hash or a Subversion revision number. description: A Git/Mercurial commit hash or a Subversion revision number.

View file

@ -213,6 +213,22 @@ sub checkInputValue {
} }
sub knownInputTypes {
my ($c) = @_;
my @keys = keys %{$c->stash->{inputTypes}};
my $types = "";
my $counter = 0;
foreach my $key (@keys) {
$types = $types . "and $key" if ++$counter == scalar(@keys);
$types = $types . "$key, " if $counter != scalar(@keys);
}
return $types;
}
sub updateJobset { sub updateJobset {
my ($c, $jobset) = @_; my ($c, $jobset) = @_;
@ -275,9 +291,10 @@ sub updateJobset {
my $type = $inputData->{type}; my $type = $inputData->{type};
my $value = $inputData->{value}; my $value = $inputData->{value};
my $emailresponsible = defined $inputData->{emailresponsible} ? 1 : 0; my $emailresponsible = defined $inputData->{emailresponsible} ? 1 : 0;
my $types = knownInputTypes($c);
error($c, "Invalid input name $name.") unless $name =~ /^[[:alpha:]][\w-]*$/; badRequest($c, "Invalid input name $name.") unless $name =~ /^[[:alpha:]][\w-]*$/;
error($c, "Invalid input type $type.") unless defined $c->stash->{inputTypes}->{$type}; badRequest($c, "Invalid input type $type; valid types: $types.") unless defined $c->stash->{inputTypes}->{$type};
my $input = $jobset->jobsetinputs->create( my $input = $jobset->jobsetinputs->create(
{ name => $name, { name => $name,

View file

@ -157,6 +157,36 @@ subtest 'Update jobset "job" to legacy type' => sub {
}; };
subtest 'Update jobset "job" to have an invalid input type' => sub {
my $jobsetupdate = request(PUT '/jobset/tests/job',
Accept => 'application/json',
Content_Type => 'application/json',
Cookie => $cookie,
Content => encode_json({
enabled => 3,
visible => JSON::true,
name => "job",
type => 0,
nixexprinput => "ofborg",
nixexprpath => "release.nix",
inputs => {
ofborg => {
name => "ofborg",
type => "123",
value => "https://github.com/NixOS/ofborg.git released"
}
},
description => "test jobset",
checkinterval => 0,
schedulingshares => 50,
keepnr => 1
})
);
ok(!$jobsetupdate->is_success);
ok($jobsetupdate->content =~ m/Invalid input type.*valid types:/);
};
subtest 'Delete jobset "job"' => sub { subtest 'Delete jobset "job"' => sub {
my $jobsetinfo = request(DELETE '/jobset/tests/job', my $jobsetinfo = request(DELETE '/jobset/tests/job',
Accept => 'application/json', Accept => 'application/json',