@@ -574,3 +574,96 @@ def test_prepare_dataset_id_unset(self):
574574 key = datastore_pb .Key ()
575575 new_key = self ._callFUT (key )
576576 self .assertTrue (new_key is key )
577+
578+
579+ class Test_find_true_dataset_id (unittest2 .TestCase ):
580+
581+ def setUp (self ):
582+ from gcloud .datastore ._testing import _setup_defaults
583+ _setup_defaults (self )
584+
585+ def tearDown (self ):
586+ from gcloud .datastore ._testing import _tear_down_defaults
587+ _tear_down_defaults (self )
588+
589+ def _callFUT (self , dataset_id , connection ):
590+ from gcloud .datastore .helpers import find_true_dataset_id
591+ return find_true_dataset_id (dataset_id , connection )
592+
593+ def test_prefixed (self ):
594+ PREFIXED = 's~DATASET'
595+ result = self ._callFUT (PREFIXED , object ())
596+ self .assertEqual (PREFIXED , result )
597+
598+ def test_unprefixed_bogus_key_miss (self ):
599+ UNPREFIXED = 'DATASET'
600+ PREFIX = 's~'
601+ CONNECTION = _Connection (PREFIX , from_missing = False )
602+ result = self ._callFUT (UNPREFIXED , CONNECTION )
603+
604+ self .assertEqual (CONNECTION ._called_dataset_id , UNPREFIXED )
605+
606+ self .assertEqual (len (CONNECTION ._lookup_result ), 1 )
607+
608+ # Make sure just one.
609+ called_key_pb , = CONNECTION ._called_key_pbs
610+ path_element = called_key_pb .path_element
611+ self .assertEqual (len (path_element ), 1 )
612+ self .assertEqual (path_element [0 ].kind , '__MissingLookupKind' )
613+ self .assertEqual (path_element [0 ].id , 1 )
614+ self .assertFalse (path_element [0 ].HasField ('name' ))
615+
616+ PREFIXED = PREFIX + UNPREFIXED
617+ self .assertEqual (result , PREFIXED )
618+
619+ def test_unprefixed_bogus_key_hit (self ):
620+ UNPREFIXED = 'DATASET'
621+ PREFIX = 'e~'
622+ CONNECTION = _Connection (PREFIX , from_missing = True )
623+ result = self ._callFUT (UNPREFIXED , CONNECTION )
624+
625+ self .assertEqual (CONNECTION ._called_dataset_id , UNPREFIXED )
626+ self .assertEqual (CONNECTION ._lookup_result , [])
627+
628+ # Make sure just one.
629+ called_key_pb , = CONNECTION ._called_key_pbs
630+ path_element = called_key_pb .path_element
631+ self .assertEqual (len (path_element ), 1 )
632+ self .assertEqual (path_element [0 ].kind , '__MissingLookupKind' )
633+ self .assertEqual (path_element [0 ].id , 1 )
634+ self .assertFalse (path_element [0 ].HasField ('name' ))
635+
636+ PREFIXED = PREFIX + UNPREFIXED
637+ self .assertEqual (result , PREFIXED )
638+
639+
640+ class _Connection (object ):
641+
642+ _called_dataset_id = _called_key_pbs = _lookup_result = None
643+
644+ def __init__ (self , prefix , from_missing = False ):
645+ self .prefix = prefix
646+ self .from_missing = from_missing
647+
648+ def lookup (self , dataset_id , key_pbs ):
649+ from gcloud .datastore import _datastore_v1_pb2 as datastore_pb
650+
651+ # Store the arguments called with.
652+ self ._called_dataset_id = dataset_id
653+ self ._called_key_pbs = key_pbs
654+
655+ key_pb , = key_pbs
656+
657+ response = datastore_pb .Entity ()
658+ response .key .CopyFrom (key_pb )
659+ response .key .partition_id .dataset_id = self .prefix + dataset_id
660+
661+ missing = []
662+ deferred = []
663+ if self .from_missing :
664+ missing [:] = [response ]
665+ self ._lookup_result = []
666+ else :
667+ self ._lookup_result = [response ]
668+
669+ return self ._lookup_result , missing , deferred
0 commit comments