blob: 90e2ed9ad5f33d1cd07e1ce2cd28556ec74c803b [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter_test/flutter_test.dart';
import 'package:interactive_media_ads/src/android/android_ads_manager.dart';
import 'package:interactive_media_ads/src/android/android_ads_manager_delegate.dart';
import 'package:interactive_media_ads/src/android/android_ads_rendering_settings.dart';
import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart'
as ima;
import 'package:interactive_media_ads/src/android/interactive_media_ads_proxy.dart';
import 'package:interactive_media_ads/src/platform_interface/platform_interface.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'ads_manager_test.mocks.dart';
@GenerateNiceMocks(<MockSpec<Object>>[
MockSpec<ima.AdError>(),
MockSpec<ima.AdErrorEvent>(),
MockSpec<ima.AdErrorListener>(),
MockSpec<ima.AdEvent>(),
MockSpec<ima.AdEventListener>(),
MockSpec<ima.AdsManager>(),
MockSpec<ima.AdsRenderingSettings>(),
MockSpec<ima.ImaSdkFactory>(),
])
void main() {
group('AndroidAdsManager', () {
test('destroy', () {
final MockAdsManager mockAdsManager = MockAdsManager();
final AndroidAdsManager adsManager = AndroidAdsManager(mockAdsManager);
adsManager.destroy();
verify(mockAdsManager.destroy());
});
test('init', () async {
final MockAdsManager mockAdsManager = MockAdsManager();
final MockImaSdkFactory mockImaSdkFactory = MockImaSdkFactory();
final MockAdsRenderingSettings mockAdsRenderingSettings =
MockAdsRenderingSettings();
when(mockImaSdkFactory.createAdsRenderingSettings()).thenAnswer(
(_) => Future<ima.AdsRenderingSettings>.value(mockAdsRenderingSettings),
);
final AndroidAdsManager adsManager = AndroidAdsManager(mockAdsManager);
final AndroidAdsRenderingSettings settings = AndroidAdsRenderingSettings(
AndroidAdsRenderingSettingsCreationParams(
bitrate: 1000,
enablePreloading: false,
loadVideoTimeout: const Duration(seconds: 2),
mimeTypes: const <String>['value'],
playAdsAfterTime: const Duration(seconds: 5),
uiElements: const <AdUIElement>{AdUIElement.countdown},
enableCustomTabs: true,
proxy: InteractiveMediaAdsProxy(
instanceImaSdkFactory: () => mockImaSdkFactory,
),
),
);
await adsManager.init(settings: settings);
verifyInOrder(<Future<void>>[
mockAdsRenderingSettings.setBitrateKbps(1000),
mockAdsRenderingSettings.setEnablePreloading(false),
mockAdsRenderingSettings.setLoadVideoTimeout(2000),
mockAdsRenderingSettings.setMimeTypes(<String>['value']),
mockAdsRenderingSettings.setPlayAdsAfterTime(5.0),
mockAdsRenderingSettings.setUiElements(
<ima.UiElement>[ima.UiElement.countdown],
),
mockAdsRenderingSettings.setEnableCustomTabs(true),
mockAdsManager.init(mockAdsRenderingSettings),
]);
});
test('start', () {
final MockAdsManager mockAdsManager = MockAdsManager();
final AndroidAdsManager adsManager = AndroidAdsManager(mockAdsManager);
adsManager.start(AdsManagerStartParams());
verify(mockAdsManager.start());
});
test('discardAdBreak', () {
final MockAdsManager mockAdsManager = MockAdsManager();
final AndroidAdsManager adsManager = AndroidAdsManager(mockAdsManager);
adsManager.discardAdBreak();
verify(mockAdsManager.discardAdBreak());
});
test('pause', () {
final MockAdsManager mockAdsManager = MockAdsManager();
final AndroidAdsManager adsManager = AndroidAdsManager(mockAdsManager);
adsManager.pause();
verify(mockAdsManager.pause());
});
test('skip', () {
final MockAdsManager mockAdsManager = MockAdsManager();
final AndroidAdsManager adsManager = AndroidAdsManager(mockAdsManager);
adsManager.skip();
verify(mockAdsManager.skip());
});
test('resume', () {
final MockAdsManager mockAdsManager = MockAdsManager();
final AndroidAdsManager adsManager = AndroidAdsManager(mockAdsManager);
adsManager.resume();
verify(mockAdsManager.resume());
});
test('onAdEvent', () async {
final MockAdsManager mockAdsManager = MockAdsManager();
late final void Function(
ima.AdEventListener,
ima.AdEvent,
) onAdEventCallback;
final InteractiveMediaAdsProxy proxy = InteractiveMediaAdsProxy(
newAdEventListener: ({
required void Function(
ima.AdEventListener,
ima.AdEvent,
) onAdEvent,
}) {
onAdEventCallback = onAdEvent;
return MockAdEventListener();
},
newAdErrorListener: ({required dynamic onAdError}) {
return MockAdErrorListener();
},
);
final AndroidAdsManager adsManager = AndroidAdsManager(
mockAdsManager,
proxy: proxy,
);
await adsManager.setAdsManagerDelegate(
AndroidAdsManagerDelegate(
PlatformAdsManagerDelegateCreationParams(
onAdEvent: expectAsync1((AdEvent event) {
expect(event.type, AdEventType.allAdsCompleted);
expect(event.adData, <String, String>{'hello': 'world'});
}),
),
),
);
final MockAdEvent mockAdEvent = MockAdEvent();
when(mockAdEvent.type).thenReturn(ima.AdEventType.allAdsCompleted);
when(mockAdEvent.adData).thenReturn(<String, String>{'hello': 'world'});
onAdEventCallback(MockAdEventListener(), mockAdEvent);
});
test('onAdErrorEvent', () async {
final MockAdsManager mockAdsManager = MockAdsManager();
late final void Function(
ima.AdErrorListener,
ima.AdErrorEvent,
) onAdErrorCallback;
final InteractiveMediaAdsProxy proxy = InteractiveMediaAdsProxy(
newAdEventListener: ({required dynamic onAdEvent}) {
return MockAdEventListener();
},
newAdErrorListener: ({
required void Function(
ima.AdErrorListener,
ima.AdErrorEvent,
) onAdError,
}) {
onAdErrorCallback = onAdError;
return MockAdErrorListener();
},
);
final AndroidAdsManager adsManager = AndroidAdsManager(
mockAdsManager,
proxy: proxy,
);
await adsManager.setAdsManagerDelegate(
AndroidAdsManagerDelegate(
PlatformAdsManagerDelegateCreationParams(
onAdErrorEvent: expectAsync1((_) {}),
),
),
);
final MockAdErrorEvent mockErrorEvent = MockAdErrorEvent();
final MockAdError mockError = MockAdError();
when(mockError.errorType).thenReturn(ima.AdErrorType.load);
when(mockError.errorCode)
.thenReturn(ima.AdErrorCode.adsRequestNetworkError);
when(mockError.message).thenReturn('error message');
when(mockErrorEvent.error).thenReturn(mockError);
onAdErrorCallback(MockAdErrorListener(), mockErrorEvent);
});
});
}