Completed
Push — master ( dfd3a9...2b76ca )
by Manas
05:54
created

st2tests.mocks.MockDatastoreService   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 68
Duplicated Lines 0 %
Metric Value
wmc 11
dl 0
loc 68
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A get_value() 0 11 2
A set_value() 0 16 2
A __init__() 0 7 1
A delete_value() 0 11 2
A list_values() 0 15 4
1
# Licensed to the StackStorm, Inc ('StackStorm') under one or more
2
# contributor license agreements.  See the NOTICE file distributed with
3
# this work for additional information regarding copyright ownership.
4
# The ASF licenses this file to You under the Apache License, Version 2.0
5
# (the "License"); you may not use this file except in compliance with
6
# the License.  You may obtain a copy of the License at
7
#
8
#     http://www.apache.org/licenses/LICENSE-2.0
9
#
10
# Unless required by applicable law or agreed to in writing, software
11
# distributed under the License is distributed on an "AS IS" BASIS,
12
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
# See the License for the specific language governing permissions and
14
# limitations under the License.
15
16
"""
17
Mock classes for use in pack testing.
18
"""
19
20
from st2common.services.datastore import DatastoreService
21
from st2client.models.keyvalue import KeyValuePair
22
23
__all__ = [
24
    'MockDatastoreService'
25
]
26
27
28
class MockDatastoreService(DatastoreService):
29
    """
30
    Mock DatastoreService for use in testing.
31
    """
32
    def __init__(self, logger, pack_name, class_name, api_username):
33
        self._pack_name = pack_name
34
        self._class_name = class_name
35
36
        # Holds mock KeyValuePair objects
37
        # Key is a KeyValuePair name and value is the KeyValuePair object
38
        self._datastore_items = {}
39
40
    def list_values(self, local=True, prefix=None):
41
        """
42
        Return a list of all values stored in a dictionary which is local to this class.
43
        """
44
        key_prefix = self._get_full_key_prefix(local=local, prefix=prefix)
45
46
        if not key_prefix:
47
            return self._datastore_items.values()
48
49
        result = []
50
        for name, kvp in self._datastore_items.items():
51
            if name.startswith(key_prefix):
52
                result.append(kvp)
53
54
        return result
55
56
    def get_value(self, name, local=True):
57
        """
58
        Return a particular value stored in a dictionary which is local to this class.
59
        """
60
        name = self._get_full_key_name(name=name, local=local)
61
62
        if name not in self._datastore_items:
63
            return None
64
65
        kvp = self._datastore_items[name]
66
        return kvp.value
67
68
    def set_value(self, name, value, ttl=None, local=True):
69
        """
70
        Store a value in a dictionary which is local to this class.
71
        """
72
        if ttl:
73
            raise ValueError('MockDatastoreService.set_value doesn\'t support "ttl" argument')
74
75
        name = self._get_full_key_name(name=name, local=local)
76
77
        instance = KeyValuePair()
78
        instance.id = name
79
        instance.name = name
80
        instance.value = value
81
82
        self._datastore_items[name] = instance
83
        return True
84
85
    def delete_value(self, name, local=True):
86
        """
87
        Delete a value from a dictionary which is local to this class.
88
        """
89
        name = self._get_full_key_name(name=name, local=local)
90
91
        if name not in self._datastore_items:
92
            return False
93
94
        del self._datastore_items[name]
95
        return True
96