text: # -*- coding: utf-8 -*-
  """
      step3.test.BeaconsPersistenceFixture
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
      BeaconsPersistenceFixture class
  
      :copyright: Conceptual Vision Consulting LLC 2018-2019, see AUTHORS for more details.
      :license: MIT, see LICENSE for more details.
  """
  from pip_services3_commons.data import PagingParams, FilterParams
  
  from src.data.version1 import BeaconV1, BeaconTypeV1
  
  BEACON1 = BeaconV1("1", "1", BeaconTypeV1.AltBeacon, "00001", "TestBeacon1", {"type": 'Point', "coordinates": [0, 0]},
                     50)
  BEACON2 = BeaconV1("2", "1", BeaconTypeV1.iBeacon, "00002", "TestBeacon2", {
                     "type": 'Point', "coordinates": [2, 2]}, 70)
  BEACON3 = BeaconV1("3", "2", BeaconTypeV1.AltBeacon, "00003", "TestBeacon3", {"type": 'Point', "coordinates": [10, 10]},
                     50)
  
  
  class BeaconsPersistenceFixture():
      _persistence = None
  
      def __init__(self, persistence):
          self._persistence = persistence
  
      def test_create_beacons(self):
          # Create the first beacon
          beacon1 = self._persistence.create(None, BEACON1)
  
          assert beacon1 is not None
          assert beacon1['site_id'] == BEACON1['site_id']
          assert beacon1['udi'] == BEACON1['udi']
          assert beacon1['type'] == BEACON1['type']
          assert beacon1['label'] == BEACON1['label']
          assert beacon1['center'] is not None
  
          # Create the second beacon
          beacon2 = self._persistence.create(None, BEACON2)
  
          assert beacon2 is not None
          assert beacon2['site_id'] == BEACON2['site_id']
          assert beacon2['udi'] == BEACON2['udi']
          assert beacon2['type'] == BEACON2['type']
          assert beacon2['label'] == BEACON2['label']
          assert beacon2['center'] is not None
  
          # Create the third beacon
          beacon3 = self._persistence.create(None, BEACON3)
  
          assert beacon3 is not None
          assert beacon3['site_id'] == BEACON3['site_id']
          assert beacon3['udi'] == BEACON3['udi']
          assert beacon3['type'] == BEACON3['type']
          assert beacon3['label'] == BEACON3['label']
          assert beacon3['center'] is not None
  
      def test_crud_operations(self):
          # Create 3 beacons
          self.test_create_beacons()
  
          # Get all beacons
          page = self._persistence.get_page_by_filter(
              None, FilterParams(), PagingParams())
          assert page is not None
          assert len(page.data) == 3
  
          beacon1 = page.data[0]
  
          # Update the beacon
          beacon1['label'] = "ABC"
          beacon = self._persistence.update(None, beacon1)
          assert beacon is not None
          assert beacon1['id'] == beacon['id']
          assert "ABC" == beacon['label']
  
          # Get beacon by udi
          beacon = self._persistence.get_one_by_udi(None, beacon1['udi'])
          assert beacon is not None
          assert beacon['id'] == beacon1['id']
  
          # Delete beacon
          self._persistence.delete_by_id(None, beacon1['id'])
  
          # Try to get deleted beacon
          beacon = self._persistence.get_one_by_id(None, beacon1['id'])
          assert beacon is None
  
      def test_get_with_filter(self):
          # Create 3 beacons
          self.test_create_beacons()
  
          # Filter by id
          page = self._persistence.get_page_by_filter(
              None, FilterParams.from_tuples("id", "1"), PagingParams())
          assert page is not None
          assert len(page.data) == 1
  
          # Filter by udi
          page = self._persistence.get_page_by_filter(
              None, FilterParams.from_tuples("udi", "00002"), PagingParams())
          assert page is not None
          assert len(page.data) == 1
  
          # Filter by udis
          page = self._persistence.get_page_by_filter(None, FilterParams.from_tuples("udis", '00001,00003'),
                                                      PagingParams())
          assert page is not None
          assert len(page.data) == 2
  
          # Filter by udi
          page = self._persistence.get_page_by_filter(
              None, FilterParams.from_tuples("site_id", "1"), PagingParams())
          assert page is not None
          assert len(page.data) == 2
  