class OrganizationTest(basetest.TestCase):
    def setUp(self):
        self.org1 = Organization('1234567890',
                                 display_name='My org',
                                 lifecycle_state=OrgLifecycleState.ACTIVE)

    def test_create_org_getters_are_correct(self):
        """Test the Organization getters."""
        my_org_id = '1234567890'
        my_org_name = 'My org name'
        org = Organization(my_org_id,
                           display_name=my_org_name,
                           lifecycle_state=OrgLifecycleState.ACTIVE)
        self.assertEqual(my_org_id, org.id)
        self.assertEqual(my_org_name, org.display_name)
        self.assertEqual(Organization.RESOURCE_NAME_FMT % my_org_id, org.name)
        self.assertEqual(ResourceType.ORGANIZATION, org.type)
        self.assertEqual(None, org.parent)
        self.assertEqual(OrgLifecycleState.ACTIVE, org.lifecycle_state)

    def test_org_type_is_organization(self):
        """Test that a created Organization is a ResourceType.ORGANIZATION."""
        self.assertEqual(ResourceType.ORGANIZATION, self.org1.type)

    def test_equality(self):
        """Test equality of an Organization to another is true."""
        id_1 = '1234567890'
        name_1 = 'My org 1'
        org1 = Organization(id_1, display_name=name_1)

        id_2 = '1234567890'
        name_2 = 'My org 1'
        org2 = Organization(id_2, display_name=name_2)

        self.assertTrue(org1 == org2)

    def test_not_equals(self):
        """Test inequality of an Organization to another."""
        id_1 = '1234567890'
        name_1 = 'My org 1'
        org1 = Organization(id_1, display_name=name_1)

        id_2 = '1234567891'
        name_2 = 'My org 2'
        org2 = Organization(id_2, display_name=name_2)

        self.assertTrue(org1 != org2)

    def test_org_notequals_project(self):
        """Test that an Organization != Project."""
        proj_id = 'my-project-1'
        proj_num = 1234567890
        proj_name = 'My project 1'
        project1 = Project(proj_id, proj_num, display_name=proj_name)

        folder_id = '88888'
        folder_name = 'My folder'
        folder1 = folder.Folder(folder_id, display_name=folder_name)

        org_id = '1234567890'
        org_name = 'My org 1'
        org1 = Organization(org_id, display_name=org_name)

        self.assertTrue(org1 != project1)
        self.assertTrue(org1 != folder1)

    @mock.patch.object(CloudResourceManagerClient,
                       'get_organization',
                       autospec=True)
    def test_org_exists(self, mock_crm):
        """Tests that the organization exists."""
        mock_crm.return_value = True
        self.assertTrue(self.org1.exists())
class OrganizationTest(basetest.TestCase):
    def setUp(self):
        self.org1 = Organization('1234567890',
                                 org_name='My org',
                                 lifecycle_state=OrgLifecycleState.ACTIVE)

    def test_create_org_getters_are_correct(self):
        """Test the Organization getters."""
        my_org_id = '1234567890'
        my_org_name = 'My org name'
        org = Organization(my_org_id,
                           org_name=my_org_name,
                           lifecycle_state=OrgLifecycleState.ACTIVE)
        self.assertEqual(my_org_id, org.get_id())
        self.assertEqual(my_org_name, org.get_name())
        self.assertEqual(ResourceType.ORGANIZATION, org.get_type())
        self.assertEqual(None, org.get_parent())
        self.assertEqual(OrgLifecycleState.ACTIVE, org.get_lifecycle_state())

    def test_org_type_is_organization(self):
        """Test that a created Organization is a ResourceType.ORGANIZATION."""
        self.assertEqual(ResourceType.ORGANIZATION, self.org1.get_type())

    def test_org_equals_other_org_is_true(self):
        """Test equality of an Organization to another is true."""
        id_1 = '1234567890'
        name_1 = 'My org 1'
        org1 = Organization(id_1, org_name=name_1)

        id_2 = '1234567890'
        name_2 = 'My org 1'
        org2 = Organization(id_2, org_name=name_2)

        self.assertTrue(org1 == org2)

    def test_org_notequals_other_org_is_true(self):
        """Test inequality of an Organization to another."""
        id_1 = '1234567890'
        name_1 = 'My org 1'
        org1 = Organization(id_1, org_name=name_1)

        id_2 = '1234567891'
        name_2 = 'My org 2'
        org2 = Organization(id_2, org_name=name_2)

        self.assertTrue(org1 != org2)

    def test_org_notequals_project_is_true(self):
        """Test inequality of an Organization to a Project."""
        id_1 = 'my-project-1'
        number_1 = 1234567890
        name_1 = 'My project 1'
        project = Project(id_1, number_1, project_name=name_1)

        id_2 = '1234567890'
        name_2 = 'My org 1'
        org = Organization(id_2, org_name=name_2)

        self.assertTrue(project != org)

    def test_org_empty_ancestors(self):
        """Test that an Organization has no ancestors."""
        expected = []
        actual = [a for a in self.org1.get_ancestors(include_self=False)]
        self.assertEqual(expected, actual)

    def test_org_ancestors_include_self(self):
        """Test getting ancestry when including self."""
        expected = [self.org1]
        actual = [a for a in self.org1.get_ancestors()]
        self.assertEqual(expected, actual)

    @mock.patch.object(CloudResourceManagerClient,
                       'get_organization',
                       autospec=True)
    def test_org_exists(self, mock_crm):
        """Tests that the organization exists."""
        mock_crm.return_value = True
        self.assertTrue(self.org1.exists())