Switch BaseApiHandler to use weave::Device interface

BUG:24267885
Change-Id: Ifd6cb2e6f71765fd7b1cc8939da3c853f612fb9f
Reviewed-on: https://weave-review.googlesource.com/1249
Reviewed-by: Alex Vakulenko <avakulenko@google.com>
diff --git a/libweave/src/base_api_handler.cc b/libweave/src/base_api_handler.cc
index 69a2838..f5dccd7 100644
--- a/libweave/src/base_api_handler.cc
+++ b/libweave/src/base_api_handler.cc
@@ -5,11 +5,9 @@
 #include "src/base_api_handler.h"
 
 #include <base/bind.h>
+#include <weave/device.h>
 
-#include "src/commands/command_instance.h"
-#include "src/commands/command_manager.h"
 #include "src/device_registration_info.h"
-#include "src/states/state_manager.h"
 
 namespace weave {
 
@@ -20,11 +18,9 @@
 const char kBaseStatePairingEnabled[] = "base.localPairingEnabled";
 }  // namespace
 
-BaseApiHandler::BaseApiHandler(
-    DeviceRegistrationInfo* device_info,
-    const std::shared_ptr<StateManager>& state_manager,
-    const std::shared_ptr<CommandManager>& command_manager)
-    : device_info_{device_info}, state_manager_{state_manager} {
+BaseApiHandler::BaseApiHandler(DeviceRegistrationInfo* device_info,
+                               Device* device)
+    : device_info_{device_info}, device_{device} {
   device_info_->GetMutableConfig()->AddOnChangedCallback(base::Bind(
       &BaseApiHandler::OnConfigChanged, weak_ptr_factory_.GetWeakPtr()));
 
@@ -32,10 +28,10 @@
   base::DictionaryValue state;
   state.SetStringWithoutPathExpansion(kBaseStateFirmwareVersion,
                                       settings.firmware_version);
-  CHECK(state_manager_->SetProperties(state, nullptr));
+  CHECK(device_->SetStateProperties(state, nullptr));
 
-  command_manager->AddCommandAddedCallback(base::Bind(
-      &BaseApiHandler::OnCommandAdded, weak_ptr_factory_.GetWeakPtr()));
+  device_->AddCommandAddedCallback(base::Bind(&BaseApiHandler::OnCommandAdded,
+                                              weak_ptr_factory_.GetWeakPtr()));
 }
 
 void BaseApiHandler::OnCommandAdded(Command* command) {
@@ -83,7 +79,7 @@
                                        settings.local_discovery_enabled);
   state.SetBooleanWithoutPathExpansion(kBaseStatePairingEnabled,
                                        settings.local_pairing_enabled);
-  state_manager_->SetProperties(state, nullptr);
+  device_->SetStateProperties(state, nullptr);
 }
 
 void BaseApiHandler::UpdateDeviceInfo(Command* command) {
diff --git a/libweave/src/base_api_handler.h b/libweave/src/base_api_handler.h
index c1a5f2e..b8a8bd1 100644
--- a/libweave/src/base_api_handler.h
+++ b/libweave/src/base_api_handler.h
@@ -13,9 +13,8 @@
 namespace weave {
 
 class Command;
-class CommandManager;
+class Device;
 class DeviceRegistrationInfo;
-class StateManager;
 struct Settings;
 
 // Handles commands from 'base' package.
@@ -26,9 +25,7 @@
 //  base.updateBaseConfiguration
 class BaseApiHandler final {
  public:
-  BaseApiHandler(DeviceRegistrationInfo* device_info,
-                 const std::shared_ptr<StateManager>& state_manager,
-                 const std::shared_ptr<CommandManager>& command_manager);
+  BaseApiHandler(DeviceRegistrationInfo* device_info, Device* device);
 
  private:
   void OnCommandAdded(Command* command);
@@ -40,7 +37,7 @@
   void OnConfigChanged(const Settings& settings);
 
   DeviceRegistrationInfo* device_info_;
-  std::shared_ptr<StateManager> state_manager_;
+  Device* device_;
 
   base::WeakPtrFactory<BaseApiHandler> weak_ptr_factory_{this};
   DISALLOW_COPY_AND_ASSIGN(BaseApiHandler);
diff --git a/libweave/src/base_api_handler_unittest.cc b/libweave/src/base_api_handler_unittest.cc
index a583dc3..2bd7741 100644
--- a/libweave/src/base_api_handler_unittest.cc
+++ b/libweave/src/base_api_handler_unittest.cc
@@ -9,6 +9,7 @@
 #include <gtest/gtest.h>
 #include <weave/provider/test/mock_config_store.h>
 #include <weave/provider/test/mock_http_client.h>
+#include <weave/test/mock_device.h>
 
 #include "src/commands/command_manager.h"
 #include "src/commands/unittest_utils.h"
@@ -32,6 +33,14 @@
 
     command_manager_ = std::make_shared<CommandManager>();
     state_manager_ = std::make_shared<StateManager>(&mock_state_change_queue_);
+
+    EXPECT_CALL(device_, SetStateProperties(_, _))
+        .WillRepeatedly(
+            Invoke(state_manager_.get(), &StateManager::SetProperties));
+    EXPECT_CALL(device_, AddCommandAddedCallback(_))
+        .WillRepeatedly(Invoke(command_manager_.get(),
+                               &CommandManager::AddCommandAddedCallback));
+
     auto state_definition = test::CreateDictionaryValue(R"({
       'base': {
         'firmwareVersion': 'string',
@@ -61,8 +70,7 @@
     dev_reg_.reset(new DeviceRegistrationInfo(command_manager_, state_manager_,
                                               std::move(config), nullptr,
                                               &http_client_, nullptr));
-    handler_.reset(
-        new BaseApiHandler{dev_reg_.get(), state_manager_, command_manager_});
+    handler_.reset(new BaseApiHandler{dev_reg_.get(), &device_});
   }
 
   void LoadCommands(const std::string& command_definitions) {
@@ -92,6 +100,7 @@
   testing::StrictMock<MockStateChangeQueueInterface> mock_state_change_queue_;
   std::shared_ptr<StateManager> state_manager_;
   std::unique_ptr<BaseApiHandler> handler_;
+  StrictMock<test::MockDevice> device_;
   int command_id_{0};
 };
 
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index e1d1e49..6ff3a88 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -45,8 +45,7 @@
   device_info_.reset(new DeviceRegistrationInfo(
       command_manager_, state_manager_, std::move(config), task_runner,
       http_client, network));
-  base_api_handler_.reset(
-      new BaseApiHandler{device_info_.get(), state_manager_, command_manager_});
+  base_api_handler_.reset(new BaseApiHandler{device_info_.get(), this});
 
   device_info_->Start();