import groovy.mock.interceptor.MockFor import groovy.util.GroovyTestCase import org.wikimedia.integration.Blubber class BlubberTestCase extends GroovyTestCase { private class WorkflowScript {} // Mock for Jenkins Pipeline workflow context def blubberConfig = ".pipeline/blubber.yaml" def blubberoidURL = "https://an.example/blubberoid/v1/" void testGenerateDockerfile() { def mock = new MockFor(WorkflowScript) def config = "version: v3\n" + "base: foo" mock.demand.readFile { args -> assert args.file == blubberConfig config } mock.demand.httpRequest { args -> assert args.httpMode == "POST" assert args.customHeaders == [[name: "content-type", value: "application/yaml"]] assert args.requestBody == config assert args.consoleLogResponseBody == true assert args.validResponseCodes == "200" [content: "BASE foo\n"] } mock.use { def blubber = new Blubber(new WorkflowScript(), blubberConfig, blubberoidURL) def dockerfile = blubber.generateDockerfile("foo") assert dockerfile == "BASE foo\n" } } void testGetConfigMediaType_yaml() { def blubber = new Blubber(new WorkflowScript(), blubberConfig, blubberoidURL) assert blubber.getConfigMediaType() == "application/yaml" } void testGetConfigMediaType_yml() { def blubber = new Blubber(new WorkflowScript(), blubberConfig, blubberoidURL) assert blubber.getConfigMediaType() == "application/yaml" } void testGetConfigMediaType_json() { def blubber = new Blubber(new WorkflowScript(), ".pipeline/blubber.json", blubberoidURL) assert blubber.getConfigMediaType() == "application/json" } void testGetRequestURL() { def blubber = new Blubber(new WorkflowScript(), blubberConfig, blubberoidURL) assert blubber.getRequestURL("foo bar") == "https://an.example/blubberoid/v1/foo+bar" } }