1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chromeos/services/assistant/media_session/assistant_media_session.h"
6 
7 #include <memory>
8 
9 #include "base/test/task_environment.h"
10 #include "chromeos/services/assistant/fake_assistant_manager_service_impl.h"
11 #include "chromeos/services/assistant/test_support/scoped_assistant_client.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 
14 namespace chromeos {
15 namespace assistant {
16 
17 using media_session::mojom::MediaSession;
18 using media_session::mojom::MediaSessionAction;
19 using media_session::mojom::MediaSessionInfo;
20 
21 class AssistantMediaSessionTest : public testing::Test {
22  public:
AssistantMediaSessionTest()23   AssistantMediaSessionTest()
24       : assistant_media_session_(std::make_unique<AssistantMediaSession>(
25             &fake_assistant_manager_service_impl_)) {}
26   ~AssistantMediaSessionTest() override = default;
27 
assistant_media_session()28   AssistantMediaSession* assistant_media_session() {
29     return assistant_media_session_.get();
30   }
31 
assistant_manager_service()32   FakeAssistantManagerServiceImpl* assistant_manager_service() {
33     return &fake_assistant_manager_service_impl_;
34   }
35 
36  private:
37   // Needed for a test environment to support post tasks and should outlive
38   // other class members.
39   base::test::SingleThreadTaskEnvironment task_environment_;
40 
41   std::unique_ptr<AssistantMediaSession> assistant_media_session_;
42   ScopedAssistantClient fake_client_;
43   FakeAssistantManagerServiceImpl fake_assistant_manager_service_impl_;
44 };
45 
TEST_F(AssistantMediaSessionTest,ShouldUpdateSessionStateOnStartStopDucking)46 TEST_F(AssistantMediaSessionTest, ShouldUpdateSessionStateOnStartStopDucking) {
47   assistant_media_session()->StartDucking();
48   EXPECT_TRUE(assistant_media_session()->IsSessionStateDucking());
49 
50   assistant_media_session()->StopDucking();
51   EXPECT_TRUE(assistant_media_session()->IsSessionStateActive());
52 }
53 
TEST_F(AssistantMediaSessionTest,ShouldUpdateSessionStateAndSendActionOnSuspendResumePlaying)54 TEST_F(AssistantMediaSessionTest,
55        ShouldUpdateSessionStateAndSendActionOnSuspendResumePlaying) {
56   assistant_media_session()->Suspend(MediaSession::SuspendType::kSystem);
57   EXPECT_TRUE(assistant_media_session()->IsSessionStateSuspended());
58   EXPECT_EQ(assistant_manager_service()->media_session_action(),
59             MediaSessionAction::kPause);
60 
61   assistant_media_session()->Resume(MediaSession::SuspendType::kSystem);
62   EXPECT_TRUE(assistant_media_session()->IsSessionStateActive());
63   EXPECT_EQ(assistant_manager_service()->media_session_action(),
64             MediaSessionAction::kPlay);
65 
66   assistant_media_session()->Suspend(MediaSession::SuspendType::kSystem);
67   EXPECT_TRUE(assistant_media_session()->IsSessionStateSuspended());
68   EXPECT_EQ(assistant_manager_service()->media_session_action(),
69             MediaSessionAction::kPause);
70 }
71 
72 }  // namespace assistant
73 }  // namespace chromeos
74