import pytest
import json

from data import model
from endpoints.api.trigger_analyzer import is_parent
from endpoints.api.trigger import BuildTrigger
from endpoints.api.test.shared import conduct_api_call
from endpoints.test.shared import client_with_identity
from test.fixtures import *


@pytest.mark.parametrize('context,dockerfile_path,expected', [
  ("/", "/a/b", True),
  ("/a", "/a/b", True),
  ("/a/b", "/a/b", False),
  ("/a//", "/a/b", True),
  ("/a", "/a//b/c", True),
  ("/a//", "a/b", True),
  ("/a/b", "a/bc/d", False),
  ("/d", "/a/b", False),
  ("/a/b", "/a/b.c", False),
  ("/a/b", "/a/b/b.c", True),
  ("", "/a/b.c", False),
  ("/a/b", "", False),
  ("", "", False),
])
def test_super_user_build_endpoints(context, dockerfile_path, expected):
  assert is_parent(context, dockerfile_path) == expected


def test_enabled_disabled_trigger(app, client):
  trigger = model.build.list_build_triggers('devtable', 'building')[0]
  trigger.config = json.dumps({'hook_id': 'someid'})
  trigger.save()

  params = {
    'repository': 'devtable/building',
    'trigger_uuid': trigger.uuid,
  }

  body = {
    'enabled': False,
  }

  with client_with_identity('devtable', client) as cl:
    result = conduct_api_call(cl, BuildTrigger, 'PUT', params, body, 200).json
    assert not result['enabled']

  body = {
    'enabled': True,
  }

  with client_with_identity('devtable', client) as cl:
    result = conduct_api_call(cl, BuildTrigger, 'PUT', params, body, 200).json
    assert result['enabled']