Add privet API tests for local auth

BUG=25768507

Change-Id: I7b86ca2af97652240ea7e4286eedf25160d31af5
Reviewed-on: https://weave-review.googlesource.com/2060
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/src/privet/privet_handler_unittest.cc b/src/privet/privet_handler_unittest.cc
index 7c9cf33..5c3c0d0 100644
--- a/src/privet/privet_handler_unittest.cc
+++ b/src/privet/privet_handler_unittest.cc
@@ -425,6 +425,67 @@
   EXPECT_JSON_EQ(kExpected, HandleRequest("/privet/v3/auth", kInput));
 }
 
+TEST_F(PrivetHandlerTest, AuthLocalAuto) {
+  EXPECT_CALL(security_, IsValidPairingCode("testToken"))
+      .WillRepeatedly(Return(true));
+  EXPECT_CALL(security_, CreateAccessToken(_, _, _, _, _, _, _))
+      .WillRepeatedly(DoAll(SetArgPointee<3>("UserAccessToken"),
+                            SetArgPointee<4>(AuthScope::kUser),
+                            SetArgPointee<5>(base::TimeDelta::FromSeconds(15)),
+                            Return(true)));
+  const char kInput[] = R"({
+    'mode': 'local',
+    'requestedScope': 'auto',
+    'authCode': 'localAuthToken'
+  })";
+  const char kExpected[] = R"({
+    'accessToken': 'UserAccessToken',
+    'expiresIn': 15,
+    'scope': 'user',
+    'tokenType': 'Privet'
+  })";
+  EXPECT_JSON_EQ(kExpected, HandleRequest("/privet/v3/auth", kInput));
+}
+
+TEST_F(PrivetHandlerTest, AuthLocal) {
+  EXPECT_CALL(security_, IsValidPairingCode("testToken"))
+      .WillRepeatedly(Return(true));
+  EXPECT_CALL(security_, CreateAccessToken(_, _, _, _, _, _, _))
+      .WillRepeatedly(DoAll(SetArgPointee<3>("ManagerAccessToken"),
+                            SetArgPointee<4>(AuthScope::kManager),
+                            SetArgPointee<5>(base::TimeDelta::FromSeconds(15)),
+                            Return(true)));
+  const char kInput[] = R"({
+    'mode': 'local',
+    'requestedScope': 'manager',
+    'authCode': 'localAuthToken'
+  })";
+  const char kExpected[] = R"({
+    'accessToken': 'ManagerAccessToken',
+    'expiresIn': 15,
+    'scope': 'manager',
+    'tokenType': 'Privet'
+  })";
+  EXPECT_JSON_EQ(kExpected, HandleRequest("/privet/v3/auth", kInput));
+}
+
+TEST_F(PrivetHandlerTest, AuthLocalHighScope) {
+  EXPECT_CALL(security_, IsValidPairingCode("testToken"))
+      .WillRepeatedly(Return(true));
+  EXPECT_CALL(security_, CreateAccessToken(_, _, _, _, _, _, _))
+      .WillRepeatedly(DoAll(SetArgPointee<3>("UserAccessToken"),
+                            SetArgPointee<4>(AuthScope::kUser),
+                            SetArgPointee<5>(base::TimeDelta::FromSeconds(1)),
+                            Return(true)));
+  const char kInput[] = R"({
+    'mode': 'local',
+    'requestedScope': 'manager',
+    'authCode': 'localAuthToken'
+  })";
+  EXPECT_PRED2(IsEqualError, CodeWithReason(403, "accessDenied"),
+               HandleRequest("/privet/v3/auth", kInput));
+}
+
 class PrivetHandlerTestWithAuth : public PrivetHandlerTest {
  public:
   void SetUp() override {