diff --git a/test/test_ims.py b/test/test_ims.py
index 67c4513bad3a90de8fa2121a631af8f3be087f84..c9501dfe303003a6d50b9aa373de292409d98152 100644
--- a/test/test_ims.py
+++ b/test/test_ims.py
@@ -5,6 +5,152 @@ from inventory_provider.db.ims import InventoryStatus
 from inventory_provider.db.ims_data import lookup_lg_routers, lookup_pop_info
 
 
+class MockResponse:
+    def __init__(self, json_data, status_code):
+        self.json_data = json_data
+        self.status_code = status_code
+
+    def json(self):
+        return self.json_data
+
+    def raise_for_status(self):
+        pass
+
+
+def test_ims_class_login(mocker):
+    mock_post = mocker.patch('inventory_provider.db.ims.requests.post')
+    mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
+    mock_post.return_value = MockResponse("my_bearer_token", 200)
+
+    ds = inventory_provider.db.ims.IMS(
+        'dummy_base', 'dummy_username', 'dummy_password')
+    ds.get_entity_by_id('Node', 1234)
+    mock_post.assert_called_once_with(
+        'dummy_base/login', auth=('dummy_username', 'dummy_password'))
+    mock_get.assert_called_once_with(
+        'dummy_base/ims/Node/1234',
+        headers={'Authorization': 'my_bearer_token'},
+        params=None)
+
+
+def test_ims_class_entity_by_id(mocker):
+    mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
+    ds = inventory_provider.db.ims.IMS(
+        'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
+
+    ds.get_entity_by_id('Node', 1234)
+    mock_get.assert_called_once_with(
+        'dummy_base/ims/Node/1234',
+        headers={'Authorization': 'dummy_bt'},
+        params=None)
+
+
+def test_ims_class_entity_by_name(mocker):
+    mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
+    ds = inventory_provider.db.ims.IMS(
+        'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
+
+    ds.get_entity_by_name('Node', 'dummy_name')
+    mock_get.assert_called_once_with(
+        'dummy_base/ims/Node/byname/dummy_name',
+        headers={'Authorization': 'dummy_bt'},
+        params=None)
+
+
+def test_ims_class_filtered_entities(mocker):
+    mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
+    ds = inventory_provider.db.ims.IMS(
+        'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
+
+    list(ds.get_filtered_entities('Node', 'dummy_param=dummy value'))
+    mock_get.assert_called_once_with(
+        'dummy_base/ims/Node/filtered/dummy_param=dummy value',
+        headers={'Authorization': 'dummy_bt'},
+        params={
+            'paginatorStartElement': 0,
+            'paginatorNumberOfElements':
+                inventory_provider.db.ims.IMS.NO_OF_ELEMENTS_PER_ITERATION
+        })
+
+    inventory_provider.db.ims.IMS.NO_OF_ELEMENTS_PER_ITERATION = 2
+
+    def side_effect(*args, **kargs):
+        if kargs['params']['paginatorStartElement'] == 0:
+            return MockResponse([1, 2], 200)
+        return MockResponse([3], 200)
+
+    mock_multi_get = mocker.patch(
+        'inventory_provider.db.ims.requests.get', side_effect=side_effect)
+
+    res = list(ds.get_filtered_entities('Node', 'dummy_param=dummy value'))
+    mock_multi_get.assert_any_call(
+        'dummy_base/ims/Node/filtered/dummy_param=dummy value',
+        headers={'Authorization': 'dummy_bt'},
+        params={
+            'paginatorStartElement': 0,
+            'paginatorNumberOfElements': 2
+        })
+    mock_multi_get.assert_any_call(
+        'dummy_base/ims/Node/filtered/dummy_param=dummy value',
+        headers={'Authorization': 'dummy_bt'},
+        params={
+            'paginatorStartElement': 2,
+            'paginatorNumberOfElements': 2
+        })
+    assert mock_multi_get.call_count == 2
+    assert res == [1, 2, 3]
+
+
+def test_ims_class_get_all_entities(mocker):
+    mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
+    ds = inventory_provider.db.ims.IMS(
+        'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
+
+    list(ds.get_all_entities('Node'))
+    mock_get.assert_called_once_with(
+        'dummy_base/ims/Node/filtered/Id <> 0',
+        headers={'Authorization': 'dummy_bt'},
+        params={
+            'paginatorStartElement': 0,
+            'paginatorNumberOfElements':
+                inventory_provider.db.ims.IMS.NO_OF_ELEMENTS_PER_ITERATION
+        })
+
+
+def test_ims_class_navigation_properties(mocker):
+    mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
+    ds = inventory_provider.db.ims.IMS(
+        'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
+
+    ds.get_entity_by_id('Node', 1234, navigation_properties=[1, 2, 3])
+    mock_get.assert_called_with(
+        'dummy_base/ims/Node/1234',
+        headers={'Authorization': 'dummy_bt'},
+        params={'navigationproperty': 6})
+
+
+def test_ims_class_cache(mocker):
+    mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
+    ds = inventory_provider.db.ims.IMS(
+        'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
+
+    ds.get_entity_by_id(
+        'Node', 4567, navigation_properties=[1, 2, 3, 4], use_cache=True)
+    assert mock_get.call_count == 1
+    ds.get_entity_by_id(
+        'Node', 4567, navigation_properties=[1, 2, 3, 4], use_cache=True)
+    assert mock_get.call_count == 1
+    ds.get_entity_by_id(
+        'Node', 4567, navigation_properties=[1, 2, 3, 4], use_cache=False)
+    assert mock_get.call_count == 2
+    ds.get_entity_by_id(
+        'Node', 4567, navigation_properties=[1, 2, 3, 4])
+    assert mock_get.call_count == 3
+    ds.get_entity_by_id(
+        'Node', 4567, navigation_properties=[1, 2, 3, 4, 5], use_cache=True)
+    assert mock_get.call_count == 4
+
+
 def test_lookup_lg_routers(mocker):
 
     ims = mocker.patch('inventory_provider.db.ims.IMS')