-
Notifications
You must be signed in to change notification settings - Fork 268
/
BuildImageFromContainerfile.spec.ts
123 lines (108 loc) · 4.49 KB
/
BuildImageFromContainerfile.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**********************************************************************
* Copyright (C) 2023 Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
***********************************************************************/
/* eslint-disable @typescript-eslint/no-explicit-any */
import '@testing-library/jest-dom/vitest';
import { test, expect, vi, beforeAll } from 'vitest';
import { render, screen } from '@testing-library/svelte';
import { providerInfos } from '../../stores/providers';
import type { ProviderStatus } from '@podman-desktop/api';
import type { ProviderContainerConnectionInfo, ProviderInfo } from '../../../../main/src/plugin/api/provider-info';
import userEvent from '@testing-library/user-event';
import BuildImageFromContainerfile from '/@/lib/image/BuildImageFromContainerfile.svelte';
// fake the window.events object
beforeAll(() => {
(window.events as unknown) = {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
receive: (_channel: string, func: any) => {
func();
},
};
(window as any).getConfigurationValue = vi.fn();
(window as any).matchMedia = vi.fn().mockReturnValue({
addListener: vi.fn(),
});
(window as any).openFileDialog = vi.fn().mockResolvedValue({ canceled: false, filePaths: ['Containerfile'] });
(window as any).telemetryPage = vi.fn().mockResolvedValue(undefined);
});
// the build image page expects to have a valid provider connection, so let's mock one
function setup() {
const pStatus: ProviderStatus = 'started';
const pInfo: ProviderContainerConnectionInfo = {
name: 'test',
status: 'started',
endpoint: {
socketPath: '',
},
type: 'podman',
};
const providerInfo = {
id: 'test',
internalId: 'id',
name: '',
containerConnections: [pInfo],
kubernetesConnections: undefined,
status: pStatus,
containerProviderConnectionCreation: false,
containerProviderConnectionInitialization: false,
kubernetesProviderConnectionCreation: false,
kubernetesProviderConnectionInitialization: false,
links: undefined,
detectionChecks: undefined,
warnings: undefined,
images: undefined,
installationSupport: undefined,
} as unknown as ProviderInfo;
providerInfos.set([providerInfo]);
}
test('Expect Build button is disabled', async () => {
setup();
render(BuildImageFromContainerfile, {});
const buildButton = screen.getByRole('button', { name: 'Build' });
expect(buildButton).toBeInTheDocument();
expect(buildButton).toBeDisabled();
});
test('Expect Build button is enabled', async () => {
setup();
render(BuildImageFromContainerfile, {});
const containerFilePath = screen.getByRole('textbox', { name: 'Containerfile Path' });
expect(containerFilePath).toBeInTheDocument();
await userEvent.type(containerFilePath, '/somepath/containerfile');
const buildFolder = screen.getByRole('textbox', { name: 'Build Context Directory' });
expect(buildFolder).toBeInTheDocument();
await userEvent.type(buildFolder, '/somepath');
const buildButton = screen.getByRole('button', { name: 'Build' });
expect(buildButton).toBeInTheDocument();
expect(buildButton).toBeEnabled();
});
test('Expect Done button is enabled once build is done', async () => {
setup();
render(BuildImageFromContainerfile, {});
const containerFilePath = screen.getByRole('textbox', { name: 'Containerfile Path' });
expect(containerFilePath).toBeInTheDocument();
await userEvent.type(containerFilePath, '/somepath/containerfile');
const buildFolder = screen.getByRole('textbox', { name: 'Build Context Directory' });
expect(buildFolder).toBeInTheDocument();
await userEvent.type(buildFolder, '/somepath');
const buildButton = screen.getByRole('button', { name: 'Build' });
expect(buildButton).toBeInTheDocument();
expect(buildButton).toBeEnabled();
await userEvent.click(buildButton);
const doneButton = screen.getByRole('button', { name: 'Done' });
expect(doneButton).toBeInTheDocument();
expect(doneButton).toBeEnabled();
});