import json

from django.test import TestCase, Client
from core.factories import UserFactory


class ApiAccessTestCase(TestCase):

    def setUp(self):
        self.query = json.dumps({
            'operationName': 'ModulesQuery',
            'query': 'query ModulesQuery { modules { edges { node { id }}}}',
            'variables': None,
        })

    def test_graphqlEndpoint_shouldNotBeAccessibleWithoutLogin(self):
        c = Client()
        response = c.post('/api/graphql/', data=self.query, content_type='application/json')
        self.assertEqual(response.status_code, 402)

    def test_graphqlEndpoint_shouldBeAccessibleForSuperUser(self):
        UserFactory(username='admin', is_staff=True, is_active=True, is_superuser=True)

        c = Client()
        c.login(username='admin', password='test')
        response = c.post('/api/graphql/', data=self.query, content_type='application/json')

        self.assertEqual(200, response.status_code)

    def test_publicGraphqlEndpoint_shouldBeAccessibleWithoutLogin(self):

        query = json.dumps({
            'operationName': 'BetaLogin',
            'query': '''
                mutation BetaLogin($input: BetaLoginInput!){
                  betaLogin(input: $input) {
                    success
                  }
                }
            ''',
            'variables': {
                'input': {
                    'usernameInput': 'test',
                    'passwordInput': 'test'
                }
            },
        })
        c = Client()
        response = c.post('/api/graphql-public/', data=query, content_type='application/json')
        self.assertEqual(response.status_code, 200)
