debian-forge-composer/internal/client/projects_test.go
Brian C. Lane e3934108f7 client: Handle the differences between unit tests and integration tests
The mock server used by unit tests is slightly different than the
running server, mostly related to package names that are hard-coded.

This adds a bool to testState that can be used in the tests to alter the
expected behavior. It should be used as little as possible.
2020-03-27 19:07:33 +01:00

98 lines
3.1 KiB
Go

// Package client - projects_test contains functions to check the projects API
// Copyright (C) 2020 by Red Hat, Inc.
// Tests should be self-contained and not depend on the state of the server
// They should use their own blueprints, not the default blueprints
// They should not assume version numbers for packages will match
// They should run tests that depend on previous results from the same function
// not from other functions.
package client
import (
// "strings"
"testing"
"github.com/stretchr/testify/require"
)
// List all the projects
func TestListAllProjectsV0(t *testing.T) {
projs, api, err := ListAllProjectsV0(testState.socket)
require.NoError(t, err)
require.Nil(t, api, "ListAllProjects failed: %#v", api)
require.True(t, len(projs) > 1, "Not enough projects returned")
}
// List some of the projects
func TestListSomeProjectsV0(t *testing.T) {
projs, api, err := ListSomeProjectsV0(testState.socket, 0, 5)
require.NoError(t, err)
require.Nil(t, api, "ListSomeProjects failed: %#v", api)
require.True(t, len(projs) == 5, "Not enough projects returned")
}
// Get info on a specific project
func TestOneProjectsInfoV0(t *testing.T) {
var moduleNames string
// Unit test uses modules/packages named packageN
if testState.unitTest {
moduleNames = "package1"
} else {
moduleNames = "bash"
}
projs, api, err := GetProjectsInfoV0(testState.socket, moduleNames)
require.NoError(t, err)
require.Nil(t, api, "GetProjectsInfo failed: %#v", api)
require.True(t, len(projs) == 1, "Not enough projects returned")
}
// Get info on a two specific projects
func TestTwoProjectsInfoV0(t *testing.T) {
var moduleNames string
// Unit test uses modules/packages named packageN
if testState.unitTest {
moduleNames = "package1,package2"
} else {
moduleNames = "bash,tmux"
}
projs, api, err := GetProjectsInfoV0(testState.socket, moduleNames)
require.NoError(t, err)
require.Nil(t, api, "GetProjectsInfo failed: %#v", api)
require.True(t, len(projs) == 2, "Not enough projects returned")
}
// Test an invalid info request
func TestEmptyProjectsInfoV0(t *testing.T) {
projs, api, err := GetProjectsInfoV0(testState.socket, "")
require.NoError(t, err)
require.NotNil(t, api, "did not return an error")
require.False(t, api.Status, "wrong Status (true)")
require.True(t, len(projs) == 0)
}
// Depsolve projects
func TestDepsolveOneProjectV0(t *testing.T) {
deps, api, err := DepsolveProjectsV0(testState.socket, "bash")
require.NoError(t, err)
require.Nil(t, api, "DepsolveProjects failed: %#v", api)
require.True(t, len(deps) > 2, "Not enough dependencies returned")
}
// Depsolve several projects
func TestDepsolveTwoProjectV0(t *testing.T) {
deps, api, err := DepsolveProjectsV0(testState.socket, "bash,tmux")
require.NoError(t, err)
require.Nil(t, api, "DepsolveProjects failed: %#v", api)
require.True(t, len(deps) > 2, "Not enough dependencies returned")
}
// Depsolve empty projects list
func TestEmptyDepsolveProjectV0(t *testing.T) {
deps, api, err := DepsolveProjectsV0(testState.socket, "")
require.NoError(t, err)
require.NotNil(t, api, "did not return an error")
require.False(t, api.Status, "wrong Status (true)")
require.True(t, len(deps) == 0)
}