def setUp(self):
     self.org = Organization()
     self.org.account_num = 1
     self.org.org_name = "Test Org"
     self.org.exclude_from_website = 0
     self.org.is_member = True
     self.org.business_member_level = "Business Leader"
     self.org.org_type = "Business"
     self.org.longitude = "-71.117111"
     self.org.latitude = "42.376266"
     self.org.city = "Cambridge"
     self.org.state = "MA"
     self.org.country = "United States"
     self.org.save()
    def setUp(self):
        self.org = Organization(
            account_num=1,
            org_name="Test Org",
            exclude_from_website=0,
            is_member=True,
            member_type="Business",
            business_member_level="Business Leader",
            org_type="Hospitality",
            longitude="-71.117111",
            latitude="42.376266",
            city="Cambridge",
            state="MA",
            country="United States",
            primary_email="*****@*****.**")
        self.org.save()
        self.client = Client()
        self.user = User.objects.create_user(
            username='******', email='*****@*****.**', password='******')
        self.client.login(username='******', password='******')

        self.member = Member(organization=self.org)
        self.member.save()

        self.category1 = SustainabilityTopic(name='Test1', slug='test1')
        self.category1.save()
        self.category2 = SustainabilityTopic(name='Test2', slug='test2')
        self.category2.save()
        self.category3 = SustainabilityTopic(name='Test3', slug='test3')
        self.category3.save()

        self.authorized_user = AuthorizedUser(
            email='*****@*****.**', member=self.member)
        self.authorized_user.save()

        link1 = Link()
        link1.member = self.member
        link1.name = 'Google'
        link1.url = 'http://www.google.com/'
        link1.save()
        link2 = Link()
        link2.member = self.member
        link2.name = 'Yahoo'
        link2.url = 'http://www.yahoo.com/'
        link2.save()
class ViewTestCase(TestCase):
    def setUp(self):
        self.org = Organization(
            account_num=1,
            org_name="Test Org",
            exclude_from_website=0,
            is_member=True,
            member_type="Business",
            business_member_level="Business Leader",
            org_type="Hospitality",
            longitude="-71.117111",
            latitude="42.376266",
            city="Cambridge",
            state="MA",
            country="United States",
            primary_email="*****@*****.**")
        self.org.save()
        self.client = Client()
        self.user = User.objects.create_user(
            username='******', email='*****@*****.**', password='******')
        self.client.login(username='******', password='******')

        self.member = Member(organization=self.org)
        self.member.save()

        self.category1 = SustainabilityTopic(name='Test1', slug='test1')
        self.category1.save()
        self.category2 = SustainabilityTopic(name='Test2', slug='test2')
        self.category2.save()
        self.category3 = SustainabilityTopic(name='Test3', slug='test3')
        self.category3.save()

        self.authorized_user = AuthorizedUser(
            email='*****@*****.**', member=self.member)
        self.authorized_user.save()

        link1 = Link()
        link1.member = self.member
        link1.name = 'Google'
        link1.url = 'http://www.google.com/'
        link1.save()
        link2 = Link()
        link2.member = self.member
        link2.name = 'Yahoo'
        link2.url = 'http://www.yahoo.com/'
        link2.save()

    def test_directory_view(self):
        url = reverse('member_directory')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_detail_view(self):
        url = reverse('member_detail_view', args=(self.member.slug,))
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_edit_view(self):
        url = reverse('member_edit_view', args=(self.member.slug,))
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

        filepath = os.path.join(os.path.dirname(__file__), 'image-300x237.png')
        with open(filepath) as upload:
            self.client.post(url, {'logo': upload})

        # get the member from the db again (because it's cached)
        member = Member.objects.get(pk=self.member.id)
        # allow for local testing
        if settings.USE_S3:
            self.assertRegexpMatches(member.logo.url, '.*s3.amazonaws.com.*')
        else:
            self.assertIsNotNone(member.logo.url)

    def test_links(self):
        links = Link.objects.filter(member=self.member)
        # Check that there are 2 lines created in the link table for the member
        self.assertEqual(len(links), 2)
        # Check that Member model method get_links works
        links = self.member.get_links()
        self.assertEqual(len(links), 2)
        # Load detail page and check that it's displaying links table
        url = reverse('member_detail_view', args=(self.member.slug,))
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'Links')

    def test_category(self):
        self.member.category_1 = SustainabilityTopic.objects.get(name='Test1')
        self.member.category_2 = SustainabilityTopic.objects.get(name='Test2')
        self.member.category_3 = SustainabilityTopic.objects.get(name='Test3')
        self.member.save()
        url = reverse('member_detail_view', args=(self.member.slug,))
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'Test1')
        self.assertContains(
            response,
            '/sustainable-campus-partners-directory/'
            '?search_terms=&category=Test1&submit=Search')

    def test_search(self):
        self.member.category_1 = SustainabilityTopic.objects.get(name='Test1')
        self.member.save()
        url = reverse('member_directory')
        url += "?search_terms=&category=Test1&submit=Search"

        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "1 result found.")

        url = reverse('member_directory')
        url += "?search_terms=&category=Test2&submit=Search"
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "No results found.")

        url = reverse('member_directory')
        url += "?search_terms=Cambridge&category=&submit=Search"
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(response, "1 result found.")

    def test_add_link_view(self):
        url = reverse('add_link', args=(self.member.slug,))
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_delete_link_view(self):

        url = reverse('delete_link',
                      kwargs={'business_slug': self.member.slug, 'id': 1})
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_edit_link_view(self):
        link1 = Link()
        link1.member = self.member
        link1.name = 'Google'
        link1.url = 'http://www.google.com/'
        link1.save()

        url = reverse('link_edit_view',
                      kwargs={'business_slug': self.member.slug, 'id': 1})
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)

    def test_rss_feed(self):
        url = reverse('all-topics-feed')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(
            response,
            '/sustainable-campus-partners-directory/test-org-ma/</link>')

        self.member.category_1 = SustainabilityTopic.objects.get(name='Test1')
        self.member.save()
        url = reverse('sustainability-topic-feed', args=('test1',))
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertContains(
            response,
            '/sustainable-campus-partners-directory/test-org-ma/</link>')

        url = reverse('sustainability-topic-feed', args=('test2',))
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        self.assertNotContains(
            response,
            '/sustainable-campus-partners-directory/test-org-ma/</link>')

    def test_primary_email(self):
        # Test to be sure rules work properly
        # with new primary email attribute when no authorized
        # user object is created.
        self.authorized_user.delete()
        queryset = AuthorizedUser.objects.all()
        self.assertFalse(queryset)
        url = reverse('member_edit_view', args=(self.member.slug,))
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
class ManagementTestCase(TestCase):
    def setUp(self):
        self.org = Organization()
        self.org.account_num = 1
        self.org.org_name = "Test Org"
        self.org.exclude_from_website = 0
        self.org.is_member = True
        self.org.business_member_level = "Business Leader"
        self.org.org_type = "Business"
        self.org.longitude = "-71.117111"
        self.org.latitude = "42.376266"
        self.org.city = "Cambridge"
        self.org.state = "MA"
        self.org.country = "United States"
        self.org.save()

    def test_create_member(self):
        """
        Test that the Member model can be instantiated
        from an organization object
        """
        self.member = Member(organization=self.org)
        self.member.save()
        check_org = Organization.objects.get(pk=1)
        self.assertTrue(check_org)
        check_member = Member.objects.get(organization=self.org)
        self.assertTrue(check_member)

        # Make sure this member is deleted so it doesn't
        # interfere with other tests
        check_member.delete()

    def test_sync_members(self):
        """
        Test that the custom management command successfully
        creates member objects for organizations
        in database.
        """
        call_command('sync_members')
        members = Member.objects.all()
        member = members[0]
        self.assertEqual(member.organization.org_name, "Test Org")
        member.delete()

    def test_update_member(self):
        """
        Test that the custom management command successfully
        updates an existing member if the organization
        is updated
        """
        call_command('sync_members')
        members = Member.objects.all()
        member = members[0]
        self.assertEqual(member.organization.org_name, "Test Org")
        self.org.business_member_level = "Business Affiliate"
        self.org.save()
        print self.org
        call_command('sync_members')
        members = Member.objects.all()
        member = members[0]
        self.assertEqual(member.organization.business_member_level,
                         "Business Affiliate")