Merge branch 'main' into avm99963-monorail

Merged commit 34d8229ae2b51fb1a15bd208e6fe6185c94f6266

GitOrigin-RevId: 7ee0917f93a577e475f8e09526dd144d245593f4
diff --git a/redirect/test/redirect_custom_value_test.py b/redirect/test/redirect_custom_value_test.py
new file mode 100644
index 0000000..d3d70ed
--- /dev/null
+++ b/redirect/test/redirect_custom_value_test.py
@@ -0,0 +1,62 @@
+# Copyright 2023 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+
+from google.appengine.ext import ndb
+from google.appengine.ext import testbed
+from redirect import redirect_custom_value
+
+
+class TestRedirectCustomValue(unittest.TestCase):
+
+  def setUp(self):
+    self.testbed = testbed.Testbed()
+    self.testbed.activate()
+    self.testbed.init_datastore_v3_stub()
+    self.testbed.init_memcache_stub()
+    ndb.get_context().clear_cache()
+
+  def tearDown(self):
+    self.testbed.deactivate()
+
+  def testGetRedirectCustomValue(self):
+    redirectCustomValue = redirect_custom_value.RedirectCustomValue
+    redirectCustomValue(
+        ProjectName='a',
+        MonorailType='test',
+        MonorailValue='a',
+        RedirectType='t',
+        RedirectValue='v').put()
+
+    (t, v) = redirectCustomValue.Get('a', 'test', 'a')
+    self.assertEqual(t, 't')
+    self.assertEqual(v, 'v')
+
+  def testGetRedirectCustomValueWithoutValue(self):
+    redirectCustomValue = redirect_custom_value.RedirectCustomValue
+
+    (t, v) = redirectCustomValue.Get('a', 'test', 'a')
+    self.assertEqual(t, None)
+    self.assertEqual(v, None)
+
+  def testGetRedirectCustomValueOnlyReturnTheFirstMatch(self):
+    # There should be only one match in db.
+    # This may change if we decided to support mutiple value mapping.
+    redirectCustomValue = redirect_custom_value.RedirectCustomValue
+    redirectCustomValue(
+        ProjectName='a',
+        MonorailType='test',
+        MonorailValue='a',
+        RedirectType='t1',
+        RedirectValue='v1').put()
+    redirectCustomValue(
+        ProjectName='a',
+        MonorailType='test',
+        MonorailValue='a',
+        RedirectType='t2',
+        RedirectValue='v2').put()
+    (t, v) = redirectCustomValue.Get('a', 'test', 'a')
+    self.assertEqual(t, 't1')
+    self.assertEqual(v, 'v1')