예제 #1
0
    def testPickProject_EnterProjectId(self):
        get_projects_mock = self.StartObjectPatch(projects_api, 'Get')
        self.StartObjectPatch(projects_util,
                              'IsActive',
                              side_effect=[False, True])

        self.WriteInput('1\nxuq\nqux')
        self.assertEqual(init_util.PickProject(), 'qux')
        self.AssertErrContains(
            '{"ux": "PROMPT_CHOICE", "message": "This account has a lot of '
            'projects! Listing them all can take a while.", "choices": '
            '["Enter a project ID", "Create a new project", "List projects"]}')
        self.AssertErrContains(
            'Project ID does not exist or is not active. Please '
            'enter an existing and active Project ID.')
        self.AssertErrContains(
            'Enter an existing project id you would like to '
            'use:')
        get_projects_mock.assert_has_calls([
            call(
                resources.REGISTRY.Create('cloudresourcemanager.projects',
                                          projectId='xuq')),
            call(
                resources.REGISTRY.Create('cloudresourcemanager.projects',
                                          projectId='qux'))
        ])
예제 #2
0
    def testPickProject_BadFreeformInput(self):
        """Should return None and show another prompt."""
        self.WriteInput('qux')

        self.assertEqual(init_util.PickProject(), None)
        self.AssertErrEquals(
            '{"ux": "PROMPT_CHOICE", "message": "Pick cloud project to use: ", '
            '"choices": ["bar", "baz", "foo", "Create a new project"]}\n')
예제 #3
0
    def testPickProject_Preselected(self):
        get_projects_mock = self.StartObjectPatch(projects_api, 'Get')
        self.StartObjectPatch(projects_util, 'IsActive', return_value=True)

        self.assertEqual(init_util.PickProject('qux'), 'qux')
        get_projects_mock.assert_called_once_with(
            resources.REGISTRY.Create('cloudresourcemanager.projects',
                                      projectId='qux'))
예제 #4
0
 def testPickProject_PreselectedButNotAvailable(self):
     """Should return None, since preselected value is not in the list."""
     self.WriteInput('n')
     self.assertEqual(init_util.PickProject('qux'), None)
     self.AssertErrContains(
         '{"ux": "PROMPT_CONTINUE", "message": "[qux] is not one of your '
         'projects [bar,baz,foo]. ", "prompt_string": "Would you like to create '
         'it?"}')
예제 #5
0
    def testPickProject_NoProjectsDoNotCreate(self):
        self.WriteInput('n')
        self.list_projects_mock.return_value = iter([])

        self.assertEqual(init_util.PickProject(), None)
        self.AssertErrEquals(
            '{"ux": "PROMPT_CONTINUE", "message": "This account has no projects.", '
            '"prompt_string": "Would you like to create one?"}\n')
예제 #6
0
    def testPickProject_FreeformInput(self):
        """Should accept free-form input, since it's in the list."""
        self.WriteInput('bar')

        self.assertEqual(init_util.PickProject(), 'bar')
        self.AssertErrEquals(
            '{"ux": "PROMPT_CHOICE", "message": "Pick cloud project to use: ", '
            '"choices": ["bar", "baz", "foo", "Create a new project"]}\n')
예제 #7
0
    def testPickProject_OneProject(self):
        projects = [self.messages.Project(projectId='spam')]
        self.list_projects_mock.return_value = iter(projects)
        self.WriteInput('1')

        self.assertEqual(init_util.PickProject(), 'spam')
        self.AssertErrEquals(
            '{"ux": "PROMPT_CHOICE", "message": "Pick cloud project to use: ", '
            '"choices": ["spam", "Create a new project"]}\n')
예제 #8
0
    def testPickProject(self):
        """Should pick the corresponding project."""
        self.WriteInput('2')

        self.assertEqual(init_util.PickProject(), 'baz')
        # Output is sorted lexicographically
        self.AssertErrEquals(
            '{"ux": "PROMPT_CHOICE", "message": "Pick cloud project to use: ", '
            '"choices": ["bar", "baz", "foo", "Create a new project"]}\n')
예제 #9
0
    def testPickProject_ListingProjectsFailsNoInput(self):
        """Should return None."""
        self.list_projects_mock.side_effect = RuntimeError('blah')

        self.assertEqual(init_util.PickProject(), None)
        self.AssertErrEquals(
            'WARNING: Listing available projects failed: blah\n'
            '{"ux": "PROMPT_RESPONSE", "message": "Enter project id you would like '
            'to use: "}',
            normalize_space=True)
예제 #10
0
    def testPickProject_PreselectedListingProjectsFails(self):
        """Should take preselected value (without validating it)."""
        self.list_projects_mock.side_effect = RuntimeError('blah')
        self.WriteInput('qux')

        self.assertEqual(init_util.PickProject(), 'qux')
        self.AssertErrEquals(
            'WARNING: Listing available projects failed: blah\n'
            '{"ux": "PROMPT_RESPONSE", "message": "Enter project id you would like '
            'to use: "}',
            normalize_space=True)
예제 #11
0
 def testPickProject_ListProjects(self):
     self.WriteInput('3\n1')
     self.assertEqual(init_util.PickProject(), 'bar')
     self.AssertErrContains(
         '{"ux": "PROMPT_CHOICE", "message": "This account has a lot of '
         'projects! Listing them all can take a while.", "choices": '
         '["Enter a project ID", "Create a new project", "List projects"]}')
     self.AssertErrContains(
         '{"ux": "PROMPT_CHOICE", "message": "Pick cloud '
         'project to use: ", "choices": ["bar", "baz", '
         '"foo", "Create a new project"]}')
예제 #12
0
    def testPickProject_CreateProject(self):
        self.SetProjectToCreate('qux')

        self.WriteInput('2\nqux')
        self.assertEqual(init_util.PickProject(), 'qux')
        self.AssertErrContains(
            '{"ux": "PROMPT_CHOICE", "message": "This account has a lot of '
            'projects! Listing them all can take a while.", "choices": '
            '["Enter a project ID", "Create a new project", "List projects"]}')
        self.create_projects_mock.assert_called_once_with(
            resources.REGISTRY.Create('cloudresourcemanager.projects',
                                      projectId='qux'))
예제 #13
0
    def testPickProject_CreateProjectFailsAsynchronously(self):
        """Should pick the corresponding project."""
        self.SetupFailedProjectCreate('new-project')
        self.WriteInput('4\nnew-project')

        self.assertEqual(init_util.PickProject(), None)
        self.AssertErrContains(
            'Operation [pc.1234] failed: 7: Something Bad Happened',
            normalize_space=True)
        self.create_projects_mock.assert_called_once_with(
            resources.REGISTRY.Create('cloudresourcemanager.projects',
                                      projectId='new-project'))
예제 #14
0
    def testPickProject_NoProjects(self):
        """Should return None because an empty project ID was given."""
        self.list_projects_mock.return_value = iter([])

        self.assertEqual(init_util.PickProject(), None)
        self.AssertErrEquals(
            '{"ux": "PROMPT_CONTINUE", "message": "This account has no projects.", '
            '"prompt_string": "Would you like to create one?"}\n'
            '{"ux": "PROMPT_RESPONSE", "message": "Enter a Project ID. Note that a '
            'Project ID CANNOT be changed later.\\nProject IDs must be 6-30 '
            'characters (lowercase ASCII, digits, or\\nhyphens) in length and '
            'start with a lowercase letter. "}',
            normalize_space=True)
예제 #15
0
    def testPickProject_CreateProjectNoInput(self):
        """Should pick the corresponding project."""
        self.WriteInput('4')

        self.assertEqual(init_util.PickProject(), None)
        self.AssertErrEquals(
            '{"ux": "PROMPT_CHOICE", "message": "Pick cloud project to use: ", '
            '"choices": ["bar", "baz", "foo", "Create a new project"]}\n'
            '{"ux": "PROMPT_RESPONSE", "message": "Enter a Project ID. Note that a '
            'Project ID CANNOT be changed later.\\nProject IDs must be 6-30 '
            'characters (lowercase ASCII, digits, or\\nhyphens) in length and '
            'start with a lowercase letter. "}',
            normalize_space=True)
        self.create_projects_mock.assert_not_called()
예제 #16
0
파일: init.py 프로젝트: txl302/RA-project
  def _PickProject(self, preselected=None):
    """Allows user to select a project.

    Args:
      preselected: str, use this value if not None

    Returns:
      str, project_id or None if was not selected.
    """
    project_id = init_util.PickProject(preselected=preselected)
    if project_id is not None:
      properties.PersistProperty(properties.VALUES.core.project, project_id)
      log.status.write('Your current project has been set to: [{0}].\n\n'
                       .format(project_id))
    return project_id
예제 #17
0
파일: init.py 프로젝트: bopopescu/howdyasay
    def _PickProject(self, preselected=None):
        """Allows user to select a project.

    Args:
      preselected: str, use this value if not None

    Returns:
      str, project_id or None if was not selected.
    """
        project_id = init_util.PickProject(preselected=preselected)
        if project_id is not None:
            self._RunCmd(['config', 'set'], ['project', project_id])
            log.status.write(
                'Your current project has been set to: [{0}].\n\n'.format(
                    project_id))
        return project_id
예제 #18
0
    def testPickProject_CreateProject(self):
        """Should pick the corresponding project."""
        self.SetProjectToCreate('new-project')
        self.WriteInput('4\nnew-project')

        self.assertEqual(init_util.PickProject(), 'new-project')
        self.AssertErrContains(
            '{"ux": "PROMPT_CHOICE", "message": "Pick cloud project to use: ", '
            '"choices": ["bar", "baz", "foo", "Create a new project"]}\n'
            '{"ux": "PROMPT_RESPONSE", "message": "Enter a Project ID. Note that a '
            'Project ID CANNOT be changed later.\\nProject IDs must be 6-30 '
            'characters (lowercase ASCII, digits, or\\nhyphens) in length and '
            'start with a lowercase letter. "}',
            normalize_space=True)
        self.create_projects_mock.assert_called_once_with(
            resources.REGISTRY.Create('cloudresourcemanager.projects',
                                      projectId='new-project'))
예제 #19
0
    def testPickProject_NoProjectsCreateAProject(self):
        self.SetProjectToCreate('qux')
        self.WriteInput('y\nqux')
        self.list_projects_mock.return_value = iter([])

        self.assertEqual(init_util.PickProject(), 'qux')
        self.AssertErrContains(
            '{"ux": "PROMPT_CONTINUE", "message": "This account has no projects.", '
            '"prompt_string": "Would you like to create one?"}\n'
            '{"ux": "PROMPT_RESPONSE", "message": "Enter a Project ID. Note that a '
            'Project ID CANNOT be changed later.\\nProject IDs must be 6-30 '
            'characters (lowercase ASCII, digits, or\\nhyphens) in length and '
            'start with a lowercase letter. "}',
            normalize_space=True)
        self.create_projects_mock.assert_called_once_with(
            resources.REGISTRY.Create('cloudresourcemanager.projects',
                                      projectId='qux'))
예제 #20
0
    def testPickProject_CreateProjectFails(self):
        """Should return None because project creation fails."""
        self.create_projects_mock.side_effect = RuntimeError('blah')
        self.WriteInput('4\nnew-project')

        self.assertEqual(init_util.PickProject(), None)
        self.AssertErrEquals("""\
        {"ux": "PROMPT_CHOICE", "message": "Pick cloud project to use: ", \
        "choices": ["bar", "baz", "foo", "Create a new project"]}
        {"ux": "PROMPT_RESPONSE", "message": "Enter a Project ID. Note that a \
        Project ID CANNOT be changed later.\\nProject IDs must be 6-30 \
        characters (lowercase ASCII, digits, or\\nhyphens) in length and start \
        with a lowercase letter. "}WARNING: Project creation failed: blah
        Please make sure to create the project [new-project] using
            $ gcloud projects create new-project
        or change to another project using
            $ gcloud config set project <PROJECT ID>
        """,
                             normalize_space=True)
        self.create_projects_mock.assert_called_once_with(
            resources.REGISTRY.Create('cloudresourcemanager.projects',
                                      projectId='new-project'))
예제 #21
0
 def testPickProject_NoInput(self):
     """Should pick the corresponding project."""
     self.assertEqual(init_util.PickProject(), None)
     self.AssertErrEquals(
         '{"ux": "PROMPT_CHOICE", "message": "Pick cloud project to use: ", '
         '"choices": ["bar", "baz", "foo", "Create a new project"]}\n')
예제 #22
0
 def testPickProject_Preselected(self):
     """Should accept preselected value, since it's in the list."""
     self.assertEqual(init_util.PickProject('foo'), 'foo')