﻿from django.test import TestCase, override_settings
from django.templatetags.static import static

from .models import TeamMember


@override_settings(SITE_URL='https://vaycancy.example')
class SeoAndStaticTests(TestCase):
    def test_public_page_has_canonical_social_metadata_and_stylesheet(self):
        response = self.client.get('/')

        self.assertEqual(response.status_code, 200)
        self.assertContains(response, '<title>Vaycancy | Rent anything. List anything.</title>')
        self.assertContains(response, 'name="description"')
        self.assertContains(response, 'rel="canonical" href="https://vaycancy.example/"')
        self.assertContains(response, 'property="og:image"')
        self.assertContains(response, 'name="twitter:card" content="summary_large_image"')
        self.assertContains(response, 'href="/assets/css/main')
        self.assertContains(response, 'rel="icon"')

    def test_private_workspace_is_not_indexable(self):
        response = self.client.get('/vayadmin/login/')

        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'name="robots" content="noindex, nofollow, noarchive"')

    def test_signup_uses_the_full_viewport_early_access_experience(self):
        response = self.client.get('/join/')

        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'class="admin-shell signup-page"')
        self.assertContains(response, 'Rent the<br><em>possible.</em>')
        self.assertContains(response, 'Claim early access')

    @override_settings(SOCIALACCOUNT_PROVIDERS={
        'google': {'APP': {'client_id': 'test-client', 'secret': 'test-secret'}},
    })
    def test_signup_offers_google_when_google_is_configured(self):
        response = self.client.get('/join/')

        self.assertContains(response, 'Continue with Google')

    def test_uploaded_team_member_does_not_break_the_about_page(self):
        TeamMember.objects.create(
            name='Test Member',
            role='Tester',
            bio='A test profile.',
            image='team/test-member.jpg',
        )

        response = self.client.get('/about/')

        self.assertEqual(response.status_code, 200)
        self.assertContains(response, '/media/team/test-member.jpg')

    def test_workspace_stylesheet_is_available(self):
        response = self.client.get(static('css/main.css'))

        self.assertEqual(response.status_code, 200)
        self.assertIn('text/css', response['Content-Type'])

    def test_favicon_request_uses_the_vaycancy_brand_mark(self):
        response = self.client.get('/favicon.ico')

        self.assertEqual(response.status_code, 302)
        self.assertIn('img/vaylogo', response['Location'])

    def test_robots_and_sitemap_list_only_public_content(self):
        robots = self.client.get('/robots.txt')
        sitemap = self.client.get('/sitemap.xml')

        self.assertEqual(robots.status_code, 200)
        self.assertContains(robots, 'Sitemap: https://vaycancy.example/sitemap.xml')
        self.assertContains(robots, 'Disallow: /vayadmin/')
        self.assertEqual(sitemap.status_code, 200)
        self.assertContains(sitemap, '<loc>https://vaycancy.example/contact/</loc>')
        self.assertNotContains(sitemap, '/vayadmin/')

    def test_team_page_renders_with_static_assets(self):
        response = self.client.get('/team/')

        self.assertEqual(response.status_code, 200)
        self.assertContains(response, 'Vaycancy Team', html=False)
        self.assertContains(response, '/assets/css/main')
