File: test_boardsAreaTest.py

package info (click to toggle)
azure-devops-cli-extension 1.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 22,680 kB
  • sloc: python: 160,797; xml: 198; sh: 61; makefile: 56
file content (165 lines) | stat: -rw-r--r-- 11,582 bytes parent folder | download | duplicates (3)
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
import os
import unittest
from knack.util import CLIError

from azure_devtools.scenario_tests import AllowLargeResponse
from .utilities.helper import DevopsScenarioTest, disable_telemetry, set_authentication, get_test_org_from_env_variable

DEVOPS_CLI_TEST_ORGANIZATION = get_test_org_from_env_variable() or 'Https://dev.azure.com/ishitamehta'

class BoardsAreaTest(DevopsScenarioTest):
    @AllowLargeResponse(size_kb=3072)
    @disable_telemetry
    @set_authentication
    def test_boards_areas(self):
        random_project_name = self.create_random_name(prefix='Area1', length=15)
        self.cmd('az devops configure --defaults organization=' +  DEVOPS_CLI_TEST_ORGANIZATION + ' project=' + random_project_name)
        
        try:
            # PROJECT LEVEL AREAS
            #create project
            create_project_command = 'az devops project create --name ' + random_project_name + ' --output json --detect false'
            project_create_output = self.cmd(create_project_command).get_output_in_json()
            created_project_id = project_create_output["id"]

            list_project_area_cmd = 'az boards area project list --project ' + random_project_name + ' --output json --detect false'
            list_project_area = self.cmd(list_project_area_cmd).get_output_in_json()
            assert list_project_area['children'] == None

            #create team
            team_name = self.create_random_name(prefix='teamArea_', length=15)
            create_team_cmd = 'az devops team create --name ' + team_name + ' --project ' + random_project_name + ' --output json --detect false'
            create_team = self.cmd(create_team_cmd).get_output_in_json()
            assert create_team['name'] == team_name

            list_project_area_cmd = 'az boards area project list --depth 0 --project ' + random_project_name + ' --output json --detect false'
            list_project_area = self.cmd(list_project_area_cmd).get_output_in_json()
            project_root_node_name =  list_project_area['name']
            project_root_node_identifier =  list_project_area['identifier']

            #create project root level areas
            root_area_name = team_name + self.create_random_name(prefix='_Root_Area_', length=15)
            create_project_area_cmd = 'az boards area project create --name '+ root_area_name + ' --project ' + random_project_name + ' --output json --detect false'
            create_project_area = self.cmd(create_project_area_cmd).get_output_in_json()
            
            root_project_area_path = create_project_area['path']
            root_project_area_id = create_project_area['id']
            root_project_area_identifier = create_project_area['identifier']
            #list project areas
            list_project_area_cmd = 'az boards area project list --project ' + random_project_name + ' --output json --detect false'
            list_project_area = self.cmd(list_project_area_cmd).get_output_in_json()
            assert len(list_project_area['children']) == 1

            #create 2 project child level areas
            child_area_name1 = self.create_random_name(prefix='ChildArea', length=15)
            create_project_area_child_cmd = 'az boards area project create --name ' + child_area_name1 + ' --path "'+ root_project_area_path + '" --project ' + random_project_name + ' --output json --detect false'
            create_project_area_child = self.cmd(create_project_area_child_cmd).get_output_in_json()
            child_area1_path = create_project_area_child['path']
            child_area1_id = create_project_area_child['id']
            child_area1_identifier = create_project_area_child['identifier']
            
            child_area_name2 = self.create_random_name(prefix='ChildArea', length=15)
            create_project_area_child_cmd = 'az boards area project create --name ' + child_area_name2 + ' --path "'+ root_project_area_path + '" --project ' + random_project_name + ' --output json --detect false'
            create_project_area_child = self.cmd(create_project_area_child_cmd).get_output_in_json()
            child_area2_path = create_project_area_child['path']
            child_area2_identifier = create_project_area_child['identifier']
            child_area2_id = create_project_area_child['id']

            list_project_area_cmd = 'az boards area project list --depth 2 --project ' + random_project_name + ' --output json --detect false'
            list_project_area = self.cmd(list_project_area_cmd).get_output_in_json()
            root_list_project_area = list_project_area['children']
            assert len(root_list_project_area) == 1
            for entry in root_list_project_area:
                if entry['name'] == root_area_name and entry['hasChildren'] and entry['children']:
                    child_name_list = [entry['children'][0]['name'], entry['children'][1]['name']]
                    assert child_area_name1 in child_name_list
                    assert child_area_name2 in child_name_list

            # show project area
            show_project_area_cmd = 'az boards area project show --id ' + str(child_area1_id) + ' --project ' + random_project_name + ' --output json --detect false'
            show_project_area = self.cmd(show_project_area_cmd).get_output_in_json()
            assert show_project_area[0]['path'] == child_area1_path
            assert show_project_area[0]['id'] == child_area1_id

            # update area
            update_project_area_name_cmd = 'az boards area project update --path "' + child_area1_path + '" --child-id ' + str(child_area2_id) + ' --project ' + random_project_name + ' --output json --detect false'
            update_project_area = self.cmd(update_project_area_name_cmd).get_output_in_json()
            assert update_project_area['path'] == child_area1_path + "\\" +child_area_name2
            assert update_project_area['id'] == child_area2_id
            child_area2_path = update_project_area['path']

            # TEAM LEVEL AREAS
            list_team_area_cmd = 'az boards area team list --team ' + team_name + ' --project ' + random_project_name + ' --output json --detect false'
            print(list_team_area_cmd)
            list_team_area = self.cmd(list_team_area_cmd).get_output_in_json()
            assert len(list_team_area['values']) == 0

            # Adding a new area to team before configuring default area should throw error.
            with self.assertRaises(Exception) as exc:
                if "Area\\" in root_project_area_path:
                    updated_root_project_area_path = root_project_area_path.replace("Area\\", '')
                    print(updated_root_project_area_path)
                    team_area_add_cmd = 'az boards area team add --path "' + updated_root_project_area_path + '" --team ' + team_name + ' --project ' + random_project_name + ' --output json --detect false'
                    team_area_add = self.cmd(team_area_add_cmd).get_output_in_json()
            self.assertIn('DefaultValue\nPlease see https://aka.ms/azure-devops-cli-troubleshooting for more information on troubleshooting common errors.' , str(exc.exception))
            
            list_team_area_cmd = 'az boards area team list --team ' + team_name + ' --project ' + random_project_name + ' --output json --detect false'
            print(list_team_area_cmd)
            list_team_area = self.cmd(list_team_area_cmd).get_output_in_json()
            assert len(list_team_area['values']) == 0

            child_area1_path = child_area1_path.replace("Area\\", '')
            child_area1_path = child_area1_path[1:]
            team_area_add_cmd = 'az boards area team add --path "' + child_area1_path + '" --team ' + team_name + ' --project ' + random_project_name + ' --set-as-default --output json --detect false'
            team_area_add = self.cmd(team_area_add_cmd).get_output_in_json()
            assert len(team_area_add['values']) == 1
            assert team_area_add['defaultValue'] == child_area1_path

            child_area2_path = child_area2_path.replace("Area\\", '')
            child_area2_path = child_area2_path[1:]
            team_area_add_cmd = 'az boards area team add --path "' + child_area2_path + '" --team ' + team_name + ' --project ' + random_project_name + ' --output json --detect false'
            team_area_add = self.cmd(team_area_add_cmd).get_output_in_json()
            assert len(team_area_add['values']) == 2
        
            team_area_update_cmd = 'az boards area team update --path "' + child_area2_path + '" --team ' + team_name + '  --include-sub-areas true --set-as-default --project ' + random_project_name + ' --output json --detect false'
            team_area_update = self.cmd(team_area_update_cmd).get_output_in_json()
            assert team_area_update['defaultValue'] == child_area2_path
            assert len(team_area_update['values']) == 2
            updated_list = team_area_update['values']
            for entry in updated_list:
                if entry['value'] == child_area2_path:
                    assert entry['includeChildren'] == True

            list_team_area_cmd = 'az boards area team list --team ' + team_name + ' --project ' + random_project_name + ' --output json --detect false'
            print(list_team_area_cmd)
            list_team_area = self.cmd(list_team_area_cmd).get_output_in_json()
            assert len(list_team_area['values']) == 2
    
            with self.assertRaises(Exception) as exc:
                team_area_remove_cmd = 'az boards area team remove --path "' + child_area2_path + '" --team ' + team_name + ' --project ' + random_project_name + ' --output json --detect false'
                print(team_area_remove_cmd)
                team_area_remove = self.cmd(team_area_remove_cmd)
            self.assertIn('You are trying to remove the default area for this team. Please change the default area node and then try this command again.', str(exc.exception))

            team_area_remove_cmd = 'az boards area team remove --path "' + child_area1_path + '" --team ' + team_name + ' --project ' + random_project_name + ' --output json --detect false'
            print(team_area_remove_cmd)
            team_area_remove = self.cmd(team_area_remove_cmd)

            list_team_area_cmd = 'az boards area team list --team ' + team_name + ' --project ' + random_project_name + ' --output json --detect false'
            print(list_team_area_cmd)
            list_team_area = self.cmd(list_team_area_cmd).get_output_in_json()
            assert len(list_team_area['values']) == 1

            delete_project_area_cmd = 'az boards area project delete --path "'+ root_project_area_path + '" --project ' + random_project_name + ' --output json --detect false -y'
            delete_project_area = self.cmd(delete_project_area_cmd)
            list_project_area = self.cmd(list_project_area_cmd).get_output_in_json()
            assert list_project_area['children'] == None

        finally:
            if created_project_id is not None:
                delete_project_command = 'az devops project delete --id ' + created_project_id + ' --output json --detect false -y'
                self.cmd(delete_project_command)