summaryrefslogtreecommitdiff
path: root/src/qtmoduleupdater/module_test.go
blob: 0e6656426feccb53609c8e4720bdf8c1b4f542e3 (plain)
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
124
125
126
127
128
129
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the repo tools module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
package main

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestModuleYamlMarshalling(t *testing.T) {
	var module YAMLDependencies
	module.Dependencies = make(map[string]*YAMLModule)

	module.Dependencies["a"] = &YAMLModule{
		Ref:      "refs/heads/foo",
		Required: false,
	}
	module.Dependencies["b"] = &YAMLModule{
		Ref:      "refs/heads/bar",
		Required: true,
	}

	var yamlStr string
	var err error
	yamlStr, err = module.ToString()
	assert.Nil(t, err, "Conversion to yaml string must succeed")

	assert.Equal(t, `dependencies:
  a:
    ref: refs/heads/foo
    required: false
  b:
    ref: refs/heads/bar
    required: true
`, yamlStr, "Yaml output should be as expected")
}

func TestProposedUpdateFailsForModulesThatDependOnMoreThanQtBase(t *testing.T) {
	// Make sure that this always points to the latest LTS branch. If it fails, update it.
	ref := "refs/heads/5.12"
	qt5Modules, err := getQt5ProductModules("qt/qt5", ref, "")

	assert.Nil(t, err, "Retrieving qt5 modules expected to work")

	todoMap, availableModules, err := loadTodoAndDoneModuleMapFromSubModules(ref, qt5Modules)
	assert.Nil(t, err, "No error expected creating module map")

	_, ok := availableModules["qt/qtbase"]
	assert.True(t, ok, "qt/qtbase must be present in the module map")

	qtSvg, ok := todoMap["qt/qtsvg"]
	assert.True(t, ok, "qtsvg must be present in the module map")
	yamlObject, err := qtSvg.maybePrepareUpdatedDependenciesYaml(availableModules)
	assert.Nil(t, err, "No error expected preparing dependencies.yaml update")
	assert.NotNil(t, yamlObject, "Yaml object must be defined for qtsvg")

	yamlStr, err := yamlObject.ToString()
	assert.Nil(t, err, "Conversion to yaml string must succeed")

	assert.Nil(t, err, "It should be possible to create a new dependencies.yaml file for qtsvg")
	assert.NotEqual(t, "", yamlStr, "Yaml string must not be empty for qtsvg")

	qtDeclarative, ok := todoMap["qt/qtdeclarative"]
	assert.True(t, ok, "qtdeclarative must be present in the module map")
	yamlObject, err = qtDeclarative.maybePrepareUpdatedDependenciesYaml(availableModules)

	assert.Nil(t, err, "It should be possible to create a new dependencies.yaml file for qtdeclarative")
	assert.Nil(t, yamlObject, "Yaml string be empty for qtdeclarative because dependencies are not available yet")
}

func TestRemovalOfNonExistentOptionalDependencies(t *testing.T) {
	// Make sure that this always points to the latest LTS branch. If it fails, update it.
	ref := "refs/heads/5.12"
	qt5Modules, err := getQt5ProductModules("qt/qt5", ref, "")
	assert.Nil(t, err, "Retrieving qt5 modules expected to work")

	_, haveSvg := qt5Modules["qt/qtsvg"]
	assert.True(t, haveSvg, "qtsvg needs to be in qt5.git")
	delete(qt5Modules, "qt/qtsvg")

	qtDeclarative := qt5Modules["qt/qtdeclarative"]
	assert.NotNil(t, qtDeclarative, "need qtdeclarative")

	assert.Contains(t, qtDeclarative.optionalDependencies, "qt/qtsvg")
	qtDeclarativeModule, err := NewModule("qt/qtdeclarative", ref, qt5Modules)
	assert.Nil(t, err, "There shall not be any error creating the module")

	assert.NotNil(t, qtDeclarativeModule, "qtdeclarative module shall exist")

	assert.Contains(t, qtDeclarativeModule.RequiredDependencies, "qt/qtbase")
	assert.NotContains(t, qtDeclarativeModule.OptionalDependencies, "qt/qtsvg")
}

func TestQueryChangeStatus(t *testing.T) {
	status, err := getGerritChangeStatus("qt/qtbase", "dev", "Ie6f0e2e3bb198a95dd40e7416adc8ffb29f3b2ba")
	assert.Nil(t, err, "Querying should not produce an error")
	assert.Equal(t, "MERGED", status)

	status, err = getGerritChangeStatus("qt/qtbase", "dev", "I6e4349f4d72de307a579f59bb689fd0638690403")
	assert.Nil(t, err, "Querying should not produce an error")
	assert.Equal(t, "ABANDONED", status)

}