add: foreign key support in database
add: more tests fix: bad tag handling when finding 0 in column
This commit is contained in:
		
							parent
							
								
									7f3182ee96
								
							
						
					
					
						commit
						1475f605aa
					
				
					 14 changed files with 214 additions and 276 deletions
				
			
		| 
						 | 
				
			
			@ -7,18 +7,12 @@ stages:
 | 
			
		|||
    url: "http://localhost:5000/api/v1/controllers/discover/"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    json:
 | 
			
		||||
    - id: !anystr
 | 
			
		||||
      name: !anystr
 | 
			
		||||
      relay_count: !anyint
 | 
			
		||||
      relays: !anystr
 | 
			
		||||
      active: !anybool
 | 
			
		||||
      port: !anyint
 | 
			
		||||
      ip: !anystr
 | 
			
		||||
      relays: !anylist
 | 
			
		||||
    verify_response_with:
 | 
			
		||||
      function: validate_controller:multiple
 | 
			
		||||
    save:
 | 
			
		||||
      json:
 | 
			
		||||
        returned_id: "[0].id"
 | 
			
		||||
        returned_relay_count: "[0].relay_count"
 | 
			
		||||
 | 
			
		||||
- name: "[controller_relays_basic] get controller relays, check length"
 | 
			
		||||
  request:
 | 
			
		||||
| 
						 | 
				
			
			@ -26,71 +20,11 @@ stages:
 | 
			
		|||
    url: "http://localhost:5000/api/v1/controllers/{returned_id}/relays"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    json:
 | 
			
		||||
    - name: !anystr
 | 
			
		||||
      number: 0
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule:
 | 
			
		||||
        id: !anystr
 | 
			
		||||
        name: !anystr
 | 
			
		||||
        periods: !anylist
 | 
			
		||||
        tags: !anylist
 | 
			
		||||
      schedules: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    - name: !anystr
 | 
			
		||||
      number: 1
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule: !anydict
 | 
			
		||||
      schedules: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    - name: !anystr
 | 
			
		||||
      number: 2
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule: !anydict
 | 
			
		||||
      schedules: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    - name: !anystr
 | 
			
		||||
      number: 3
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule: !anydict
 | 
			
		||||
      schedules: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    - name: !anystr
 | 
			
		||||
      number: 4
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule: !anydict
 | 
			
		||||
      schedules: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    - name: !anystr
 | 
			
		||||
      number: 5
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule: !anydict
 | 
			
		||||
      schedules: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    - name: !anystr
 | 
			
		||||
      number: 6
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule: !anydict
 | 
			
		||||
      schedules: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    - name: !anystr
 | 
			
		||||
      number: 7
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule: !anydict
 | 
			
		||||
      schedules: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    - name: !anystr
 | 
			
		||||
      number: 8
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule: !anydict
 | 
			
		||||
      schedules: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    - name: !anystr
 | 
			
		||||
      number: 9
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule: !anydict
 | 
			
		||||
      schedules: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    verify_response_with:
 | 
			
		||||
      function: validate_relay:multiple
 | 
			
		||||
      function: validate_relay:relay_count
 | 
			
		||||
      extra_kwargs:
 | 
			
		||||
        relay_count: !int "{returned_relay_count:d}"
 | 
			
		||||
 | 
			
		||||
- name: "[controller_relays_basic] get controller relays, check length"
 | 
			
		||||
  request:
 | 
			
		||||
| 
						 | 
				
			
			@ -98,42 +32,11 @@ stages:
 | 
			
		|||
    url: "http://localhost:5000/api/v1/controllers/{returned_id}/relays/5"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    json:
 | 
			
		||||
      name: !anystr
 | 
			
		||||
      number: 5
 | 
			
		||||
      controller_id: "{returned_id}"
 | 
			
		||||
      active_schedule:
 | 
			
		||||
        id: !anystr
 | 
			
		||||
        name: !anystr
 | 
			
		||||
        periods: !anylist
 | 
			
		||||
        tags: !anylist
 | 
			
		||||
      schedules: 
 | 
			
		||||
      - id: !anystr
 | 
			
		||||
        name: !anystr
 | 
			
		||||
        periods: !anylist
 | 
			
		||||
        tags: !anylist
 | 
			
		||||
      - id: !anystr
 | 
			
		||||
        name: !anystr
 | 
			
		||||
        periods: !anylist
 | 
			
		||||
        tags: !anylist
 | 
			
		||||
      - id: !anystr
 | 
			
		||||
        name: !anystr
 | 
			
		||||
        periods: !anylist
 | 
			
		||||
        tags: !anylist
 | 
			
		||||
      - id: !anystr
 | 
			
		||||
        name: !anystr
 | 
			
		||||
        periods: !anylist
 | 
			
		||||
        tags: !anylist
 | 
			
		||||
      - id: !anystr
 | 
			
		||||
        name: !anystr
 | 
			
		||||
        periods: !anylist
 | 
			
		||||
        tags: !anylist
 | 
			
		||||
      - id: !anystr
 | 
			
		||||
        name: !anystr
 | 
			
		||||
        periods: !anylist
 | 
			
		||||
        tags: !anylist
 | 
			
		||||
      - id: !anystr
 | 
			
		||||
        name: !anystr
 | 
			
		||||
        periods: !anylist
 | 
			
		||||
        tags: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    verify_response_with:
 | 
			
		||||
      function: validate_relay:single
 | 
			
		||||
      function: validate_relay:check_controller_id
 | 
			
		||||
      extra_kwargs:
 | 
			
		||||
        name: "{returned_id}"
 | 
			
		||||
      function: validate_relay:check_number
 | 
			
		||||
      extra_kwargs:
 | 
			
		||||
        number: 5
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,3 +44,56 @@ stages:
 | 
			
		|||
        id: "{returned_id}"
 | 
			
		||||
        name: "{returned_name}"
 | 
			
		||||
        periods: "{returned_periods}"
 | 
			
		||||
 | 
			
		||||
- name: "[tags] discover controllers"
 | 
			
		||||
  request:
 | 
			
		||||
    method: POST
 | 
			
		||||
    url: "http://localhost:5000/api/v1/controllers/discover/"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    verify_response_with:
 | 
			
		||||
      function: validate_controller:multiple
 | 
			
		||||
    save:
 | 
			
		||||
      json:
 | 
			
		||||
        returned_id: "[0].id"
 | 
			
		||||
 | 
			
		||||
- name: "[tags] set relay tag"
 | 
			
		||||
  request:
 | 
			
		||||
    method: PUT
 | 
			
		||||
    url: "http://localhost:5000/api/v1/controllers/{returned_id}/relays/3"
 | 
			
		||||
    json:
 | 
			
		||||
      tags:
 | 
			
		||||
      - "test_tag_1"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    verify_response_with:
 | 
			
		||||
      function: validate_relay:single
 | 
			
		||||
      function: validate_relay:check_controller_id
 | 
			
		||||
      extra_kwargs:
 | 
			
		||||
        name: "{returned_id}"
 | 
			
		||||
      function: validate_relay:check_number
 | 
			
		||||
      extra_kwargs:
 | 
			
		||||
        number: 3
 | 
			
		||||
      function: validate_relay:check_tag
 | 
			
		||||
      extra_kwargs:
 | 
			
		||||
        tag: "{tavern.request_vars.json.tags[0]}"
 | 
			
		||||
    save:
 | 
			
		||||
      json:
 | 
			
		||||
        returned_name: "name"
 | 
			
		||||
        returned_number: "number"
 | 
			
		||||
        returned_tag: "tags[0]"
 | 
			
		||||
 | 
			
		||||
- name: "[tags] get relay, check name and number"
 | 
			
		||||
  request:
 | 
			
		||||
    method: GET
 | 
			
		||||
    url: "http://localhost:5000/api/v1/relays/tag/{returned_tag}"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    verify_response_with:
 | 
			
		||||
      function: validate_relay:multiple
 | 
			
		||||
      function: validate_relay:find
 | 
			
		||||
      extra_kwargs:
 | 
			
		||||
        name: "{returned_name}"
 | 
			
		||||
        number: !int "{returned_number:d}"
 | 
			
		||||
        controller_id: "{returned_id}"
 | 
			
		||||
        tag: "{returned_tag}"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								tests/tavern_utils/__pycache__/validate_relay.cpython-38.pyc
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								tests/tavern_utils/__pycache__/validate_relay.cpython-38.pyc
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										41
									
								
								tests/tavern_utils/validate_controller.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								tests/tavern_utils/validate_controller.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
import json
 | 
			
		||||
import validate_relay
 | 
			
		||||
 | 
			
		||||
def _verify_single(controller):
 | 
			
		||||
    assert isinstance(controller.get("id"), str), "controller id is not a string"
 | 
			
		||||
    assert isinstance(controller.get("name"), str), "controller name is not a string"
 | 
			
		||||
    assert isinstance(controller.get("relay_count"), int), "controller relay_count is not an integer"
 | 
			
		||||
 | 
			
		||||
    assert isinstance(controller.get("relays"), list), "controller relays is not a list"
 | 
			
		||||
    assert len(controller.get("relays")) == controller.get("relay_count"), "controller relay have a length unequal to relay_count"
 | 
			
		||||
    for relay in controller.get("relays"):
 | 
			
		||||
        assert isinstance(relay, dict), "controller relays contain a relay which is not a dict"
 | 
			
		||||
        validate_relay._verify_single(relay)
 | 
			
		||||
        assert relay.get("controller_id") == controller.get("id")
 | 
			
		||||
 | 
			
		||||
def single(response):
 | 
			
		||||
    _verify_single(response.json())
 | 
			
		||||
 | 
			
		||||
def multiple(response):
 | 
			
		||||
    assert isinstance(response.json(), list), "response is not a list"
 | 
			
		||||
    for controller in response.json():
 | 
			
		||||
        _verify_single(controller)
 | 
			
		||||
 | 
			
		||||
def check_id(response, id):
 | 
			
		||||
    assert response.json().get("id") == id, "controller id check failed"
 | 
			
		||||
 | 
			
		||||
def check_name(response, name):
 | 
			
		||||
    assert response.json().get("name") == name, "controller name check failed"
 | 
			
		||||
 | 
			
		||||
def find(response, id=None, name=None):
 | 
			
		||||
    for controller in response.json():
 | 
			
		||||
        if id != None and id != schedule.get("id"):
 | 
			
		||||
            print(schedule.get("id"))
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        if name != None and name != schedule.get("name"):
 | 
			
		||||
            print(schedule.get("name"))
 | 
			
		||||
            continue
 | 
			
		||||
        return
 | 
			
		||||
    assert False, "controller not found in list"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,2 +1,68 @@
 | 
			
		|||
import json
 | 
			
		||||
import validate_schedule
 | 
			
		||||
 | 
			
		||||
def _verify_single(relay):
 | 
			
		||||
    assert isinstance(relay.get("number"), int), "relay number is not an integer"
 | 
			
		||||
    assert isinstance(relay.get("name"), str), "relay name is not a string"
 | 
			
		||||
    assert isinstance(relay.get("controller_id"), str), "relay controller_id is not a string"
 | 
			
		||||
 | 
			
		||||
    assert isinstance(relay.get("active_schedule"), dict), "relay active_schedule is not a dict"
 | 
			
		||||
    validate_schedule._verify_single(relay.get("active_schedule"))
 | 
			
		||||
 | 
			
		||||
    assert isinstance(relay.get("schedules"), list), "relay schedules is not a list"
 | 
			
		||||
    assert len(relay.get("schedules")) == 7, "relay schedule have a length unequal to 7"
 | 
			
		||||
    for schedule in relay.get("schedules"):
 | 
			
		||||
        assert isinstance(relay, dict), "relay schedules contain a schedule which is not a dict"
 | 
			
		||||
        validate_schedule._verify_single(schedule)
 | 
			
		||||
 | 
			
		||||
    assert isinstance(relay.get("tags"), list), "relay tags is not a list"
 | 
			
		||||
    for tag in relay.get("tags"):
 | 
			
		||||
        assert isinstance(tag, str), "relay tags contain a tag which is not a string"
 | 
			
		||||
 | 
			
		||||
def single(response):
 | 
			
		||||
    assert response.json().get("number") >= 0
 | 
			
		||||
    _verify_single(response.json())
 | 
			
		||||
 | 
			
		||||
def multiple(response):
 | 
			
		||||
    assert isinstance(response.json(), list), "response is not a list"
 | 
			
		||||
    for relay in response.json():
 | 
			
		||||
        _verify_single(relay)
 | 
			
		||||
 | 
			
		||||
def relay_count(response, relay_count):
 | 
			
		||||
    assert len(response.json()) == relay_count, "response has invalid length"
 | 
			
		||||
 | 
			
		||||
def check_number(response, number):
 | 
			
		||||
    assert response.json().get("number") == number, "relay number check failed"
 | 
			
		||||
 | 
			
		||||
def check_name(response, name):
 | 
			
		||||
    assert response.json().get("name") == name, "relay name check failed"
 | 
			
		||||
 | 
			
		||||
def check_controller_id(response, controller_id):
 | 
			
		||||
    assert response.json().get("controller_id") == controller_id, "relay controller_id check failed"
 | 
			
		||||
 | 
			
		||||
def check_tag(response, tag):
 | 
			
		||||
    for response_tag in response.json().get("tags"):
 | 
			
		||||
        if response_tag == tag:
 | 
			
		||||
            return
 | 
			
		||||
    assert False, "tag not found in relay,"
 | 
			
		||||
 | 
			
		||||
def find(response, name=None, number=None, controller_id=None, tag=None):
 | 
			
		||||
    print(response.json())
 | 
			
		||||
    for relay in response.json():
 | 
			
		||||
        if number != None and number != relay.get("number"):
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        if name != None and name != relay.get("name"):
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        if controller_id != None and controller_id != relay.get("controller_id"):
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        if tag != None:
 | 
			
		||||
            found_in_response = False
 | 
			
		||||
            for response_tag in relay.get("tags"):
 | 
			
		||||
                if response_tag == tag:
 | 
			
		||||
                    found_in_response = True
 | 
			
		||||
            if not found_in_response:
 | 
			
		||||
                continue
 | 
			
		||||
        return
 | 
			
		||||
    assert False, "relay not found in list"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue