buildkite-swift/Tests/BuildkiteTests/Resources/PipelinesTests.swift

227 lines
10 KiB
Swift

//
// PipelinesTests.swift
// Buildkite
//
// Created by Aaron Sky on 5/4/20.
// Copyright © 2020 Aaron Sky. All rights reserved.
//
import Foundation
import XCTest
@testable import Buildkite
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
extension Pipeline {
init(steps: [Step] = []) {
self.init(id: UUID(),
url: URL(),
webUrl: URL(),
name: "My Pipeline",
slug: "my-pipeline",
repository: "git@github.com:buildkite/agent.git",
branchConfiguration: nil,
defaultBranch: "master",
provider: Provider(id: "github",
webhookUrl: URL(),
settings: Provider.Settings(repository: nil,
buildPullRequests: nil,
pullRequestBranchFilterEnabled: nil,
pullRequestBranchFilterConfiguration: nil,
skipPullRequestBuildsForExistingCommits: nil,
buildTags: nil,
publishCommitStatus: nil,
publishCommitStatusPerStep: nil,
triggerMode: nil,
filterEnabled: nil,
filterCondition: nil,
buildPullRequestForks: nil,
prefixPullRequestForkBranchNames: nil,
separatePullRequestStatuses: nil,
publishBlockedAsPending: nil)),
skipQueuedBranchBuilds: false,
skipQueuedBranchBuildsFilter: nil,
cancelRunningBranchBuilds: false,
cancelRunningBranchBuildsFilter: nil,
buildsUrl: URL(),
badgeUrl: URL(),
createdAt: Date(timeIntervalSince1970: 1000),
scheduledBuildsCount: 0,
runningBuildsCount: 0,
scheduledJobsCount: 0,
runningJobsCount: 0,
waitingJobsCount: 0,
visibility: "private",
steps: steps,
env: [:])
}
}
class PipelinesTests: XCTestCase {
func testPipelinesList() throws {
let expected = [Pipeline(), Pipeline()]
let context = try MockContext(content: expected)
let expectation = XCTestExpectation()
context.client.send(Pipeline.Resources.List(organization: "buildkite")) { result in
do {
let response = try result.get()
XCTAssertEqual(expected, response.content)
} catch {
XCTFail(error.localizedDescription)
}
expectation.fulfill()
}
wait(for: [expectation])
}
func testPipelinesGet() throws {
let expected = Pipeline()
let context = try MockContext(content: expected)
let expectation = XCTestExpectation()
context.client.send(Pipeline.Resources.Get(organization: "buildkite", pipeline: "my-pipeline")) { result in
do {
let response = try result.get()
XCTAssertEqual(expected, response.content)
} catch {
XCTFail(error.localizedDescription)
}
expectation.fulfill()
}
wait(for: [expectation])
}
func testPipelinesCreate() throws {
let steps: [Pipeline.Step] = [
.script(Pipeline.Step.Command(name: "📦",
command: "echo true",
label: "📦",
artifactPaths: "*",
branchConfiguration: nil,
env: [:],
timeoutInMinutes: nil,
agentQueryRules: [],
async: nil,
concurrency: nil,
parallelism: nil)),
.waiter(Pipeline.Step.Wait(label: "wait",
continueAfterFailure: true)),
.manual(Pipeline.Step.Block(label: "manual")),
.trigger(Pipeline.Step.Trigger(triggerProjectSlug: "my-other-pipeline",
label: "trigger",
triggerCommit: nil,
triggerBranch: nil,
triggerAsync: nil))
]
let expected = Pipeline(steps: steps)
let context = try MockContext(content: expected)
let resource = Pipeline.Resources.Create(organization: "buildkite",
body: Pipeline.Resources.Create.Body(name: "My Pipeline",
repository: URL(),
steps: steps,
branchConfiguration: nil,
cancelRunningBranchBuilds: nil,
cancelRunningBranchBuildsFilter: nil,
defaultBranch: nil,
description: nil,
env: nil,
providerSettings: nil,
skipQueuedBranchBuilds: nil,
skipQueuedBranchBuildsFilter: nil,
teamUUIDs: nil))
let expectation = XCTestExpectation()
context.client.send(resource) { result in
do {
_ = try result.get()
} catch {
XCTFail(error.localizedDescription)
}
expectation.fulfill()
}
wait(for: [expectation])
}
func testPipelinesUpdate() throws {
let expected = Pipeline()
let context = try MockContext(content: expected)
let resource = Pipeline.Resources.Update(organization: "buildkite",
pipeline: "my-pipeline",
body: Pipeline.Resources.Update.Body(branchConfiguration: nil,
cancelRunningBranchBuilds: nil,
cancelRunningBranchBuildsFilter: nil,
defaultBranch: nil,
description: nil,
env: nil,
name: nil,
providerSettings: nil,
repository: nil,
steps: nil,
skipQueuedBranchBuilds: nil,
skipQueuedBranchBuildsFilter: nil,
visibility: nil))
let expectation = XCTestExpectation()
context.client.send(resource) { result in
do {
_ = try result.get()
} catch {
XCTFail(error.localizedDescription)
}
expectation.fulfill()
}
wait(for: [expectation])
}
func testPipelinesDelete() throws {
let context = MockContext()
let expectation = XCTestExpectation()
context.client.send(Pipeline.Resources.Delete(organization: "buildkite", pipeline: "my-pipeline")) { result in
do {
_ = try result.get()
} catch {
XCTFail(error.localizedDescription)
}
expectation.fulfill()
}
wait(for: [expectation])
}
}
extension PipelinesTests {
private struct EnvVarTestData {
let object: EnvVars = [
"doors": nil,
"boats": .number(1),
"houses": .string("ghosts"),
"rocks": .bool(true),
"horses": .array([
.number(1),
.number(2),
.number(3),
.number(4),
]),
"bigs": .dictionary([
"vending": .string("machine"),
"yes": nil
])
]
}
func testEnvVarDecodeEncode() throws {
let testData = EnvVarTestData()
let data = try JSONEncoder().encode(testData.object)
let object = try JSONDecoder().decode(EnvVars.self, from: data)
XCTAssertEqual(object, testData.object)
}
}