github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/mongo/utils/data_cleansing_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package utils_test
     5  
     6  import (
     7  	"github.com/juju/testing"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/mongo/utils"
    11  )
    12  
    13  type dataCleansingSuite struct {
    14  	testing.IsolationSuite
    15  }
    16  
    17  var _ = gc.Suite(&dataCleansingSuite{})
    18  
    19  func (s *dataCleansingSuite) TestEscapeKeys_EscapesPeriods(c *gc.C) {
    20  	before := map[string]interface{}{
    21  		"a.b": "c",
    22  	}
    23  	after := utils.EscapeKeys(before)
    24  
    25  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    26  		"a" + "\uff0e" + "b": "c",
    27  	})
    28  }
    29  
    30  func (s *dataCleansingSuite) TestEscapeKeys_EscapesDollarSigns(c *gc.C) {
    31  	before := map[string]interface{}{
    32  		"$a": "c",
    33  	}
    34  	after := utils.EscapeKeys(before)
    35  
    36  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    37  		"\uff04" + "a": "c",
    38  	})
    39  }
    40  
    41  func (s *dataCleansingSuite) TestEscapeKeys_RecursivelyEscapes(c *gc.C) {
    42  	before := map[string]interface{}{
    43  		"$a": "c",
    44  		"b": map[string]interface{}{
    45  			"$foo.bar": "baz",
    46  		},
    47  	}
    48  	after := utils.EscapeKeys(before)
    49  
    50  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    51  		"\uff04" + "a": "c",
    52  		"b": map[string]interface{}{
    53  			"\uff04" + "foo" + "\uff0e" + "bar": "baz",
    54  		},
    55  	})
    56  }
    57  
    58  func (s *dataCleansingSuite) TestUnescapeKey_UnescapesPeriods(c *gc.C) {
    59  	before := map[string]interface{}{
    60  		"a" + "\uff0e" + "b": "c",
    61  	}
    62  	after := utils.UnescapeKeys(before)
    63  
    64  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    65  		"a.b": "c",
    66  	})
    67  }
    68  
    69  func (s *dataCleansingSuite) TestUnescapeKeys_UnescapesDollarSigns(c *gc.C) {
    70  	before := map[string]interface{}{
    71  		"\uff04" + "a": "c",
    72  	}
    73  	after := utils.UnescapeKeys(before)
    74  
    75  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    76  		"$a": "c",
    77  	})
    78  }
    79  
    80  func (s *dataCleansingSuite) TestUnescapeKeys_RecursivelyUnescapes(c *gc.C) {
    81  	before := map[string]interface{}{
    82  		"\uff04" + "a": "c",
    83  		"b": map[string]interface{}{
    84  			"\uff04" + "foo" + "\uff0e" + "bar": "baz",
    85  		},
    86  	}
    87  	after := utils.UnescapeKeys(before)
    88  
    89  	c.Check(after, gc.DeepEquals, map[string]interface{}{
    90  		"$a": "c",
    91  		"b": map[string]interface{}{
    92  			"$foo.bar": "baz",
    93  		},
    94  	})
    95  }
    96  
    97  func (s *dataCleansingSuite) TestEscapeKey_EscapesPeriods(c *gc.C) {
    98  	c.Check("a"+"\uff0e"+"b", gc.Equals, utils.EscapeKey("a.b"))
    99  }
   100  
   101  func (s *dataCleansingSuite) TestEscapeKey_EscapesDollarSigns(c *gc.C) {
   102  	c.Check("\uff04"+"a", gc.Equals, utils.EscapeKey("$a"))
   103  }
   104  
   105  func (s *dataCleansingSuite) TestUnescapeKey_UnescapesPeriod(c *gc.C) {
   106  	c.Check(utils.UnescapeKey("a"+"\uff0e"+"b"), gc.Equals, "a.b")
   107  }
   108  
   109  func (s *dataCleansingSuite) TestUnescapeKey_UnescapesDollarSigns(c *gc.C) {
   110  	c.Check(utils.UnescapeKey("\uff04"+"a"), gc.Equals, "$a")
   111  }