-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add option to enforce refs on
whippet deps validate
This commit adds an `--enforce-refs` option that can be passed into `whippet deps validate` that will cause it to fail if a dependency in whippet.json is missing a "ref" property. This will facilitate us in enabling automatic plugin updates, we we'll be able to update our shared whippet validation workflow to fail if references are missing, thereby ensuring that all dependencies have a reference and therefore can't be accidentally updated beyond e.g. a major version tag, or a specific pinned version. Note that like the other checks in `whippet deps validate`, this does not check whether the reference provided exists and is valid, it just checks one is provided. An implicit check on the validity of the reference itself happens when `whippet deps update` or `whippet deps install` is run.
- Loading branch information
Showing
3 changed files
with
99 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -181,6 +181,94 @@ | |
expect($result->getErr())->toEqual('Missing revision property in whippet.lock for plugins: advanced-custom-fields-pro'); | ||
}); | ||
}); | ||
context('but an entry in .json is missing a ref when --enforce-refs is set', function () { | ||
it('returns an error', function () { | ||
$whippetContents = '{ | ||
"src": { | ||
"plugins": "[email protected]:wordpress-plugins/" | ||
}, | ||
"plugins": [ | ||
{"name": "akismet", "ref": "v1"}, | ||
{"name": "advanced-custom-fields-pro"} | ||
] | ||
}'; | ||
allow('file_get_contents')->toBeCalled()->andReturn($whippetContents); | ||
allow('sha1')->toBeCalled()->andReturn('a_matching_sha'); | ||
expect('sha1')->toBeCalled()->once()->with($whippetContents); | ||
allow($this->whippetLock)->toReceive('getHash')->andReturn('a_matching_sha'); | ||
allow($this->whippetJson)->toReceive('getDependencies')->andReturn([], [ | ||
[ | ||
'name' => 'akismet', | ||
'ref' => 'v1' | ||
], | ||
[ | ||
'name' => 'advanced-custom-fields-pro' | ||
] | ||
]); | ||
allow($this->whippetLock)->toReceive('getDependencies')->andReturn([], [ | ||
[ | ||
'name' => 'akismet', | ||
'src' => 'a_src_1', | ||
'revision' => 'a_revision_1' | ||
], | ||
[ | ||
'name' => 'advanced-custom-fields-pro', | ||
'src' => 'a_src_2', | ||
'revision' => 'a_revision_2' | ||
] | ||
]); | ||
ob_start(); | ||
$result = $this->validator->validate(true); | ||
$output = ob_get_clean(); | ||
expect($result->getErr())->toEqual("Missing reference in whippet.json for plugins: advanced-custom-fields-pro"); | ||
expect($result)->toBeAnInstanceOf(\Result\Result::class); | ||
expect($result->isErr())->toEqual(true); | ||
}); | ||
}); | ||
context('but an entry in whippet.json is missing a ref when --enforce-refs is not set', function () { | ||
it('returns an ok result', function () { | ||
$whippetContents = '{ | ||
"src": { | ||
"plugins": "[email protected]:wordpress-plugins/" | ||
}, | ||
"plugins": [ | ||
{"name": "akismet", "ref": "v1"}, | ||
{"name": "advanced-custom-fields-pro"} | ||
] | ||
}'; | ||
allow('file_get_contents')->toBeCalled()->andReturn($whippetContents); | ||
allow('sha1')->toBeCalled()->andReturn('a_matching_sha'); | ||
expect('sha1')->toBeCalled()->once()->with($whippetContents); | ||
allow($this->whippetLock)->toReceive('getHash')->andReturn('a_matching_sha'); | ||
allow($this->whippetJson)->toReceive('getDependencies')->andReturn([], [ | ||
[ | ||
'name' => 'akismet', | ||
'ref' => 'v1' | ||
], | ||
[ | ||
'name' => 'advanced-custom-fields-pro' | ||
] | ||
]); | ||
allow($this->whippetLock)->toReceive('getDependencies')->andReturn([], [ | ||
[ | ||
'name' => 'akismet', | ||
'src' => 'a_src_1', | ||
'revision' => 'a_revision_1' | ||
], | ||
[ | ||
'name' => 'advanced-custom-fields-pro', | ||
'src' => 'a_src_2', | ||
'revision' => 'a_revision_2' | ||
] | ||
]); | ||
ob_start(); | ||
$result = $this->validator->validate(); | ||
$output = ob_get_clean(); | ||
expect($output)->toEqual("Valid whippet.json and whippet.lock \n"); | ||
expect($result)->toBeAnInstanceOf(\Result\Result::class); | ||
expect($result->isErr())->toEqual(false); | ||
}); | ||
}); | ||
context('and everything is good', function () { | ||
it('returns an ok result', function () { | ||
$whippetContents = '{ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters