blob: 21111b3daa25205e8951c14781fbe92d069cb866 [file] [log] [blame]
Devon Carew26ceabe2014-12-11 11:44:53 -08001// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5library usage.impl_test;
6
Devon Carew590f3432015-10-17 14:00:33 -07007import 'package:test/test.dart';
Devon Carew26ceabe2014-12-11 11:44:53 -08008import 'package:usage/src/usage_impl.dart';
Devon Carewe328cc22014-12-18 13:10:45 -08009
10import 'src/common.dart';
Devon Carew26ceabe2014-12-11 11:44:53 -080011
Mike Fairhurst43af9e62018-02-19 15:00:30 -080012void main() => defineTests();
Devon Carew590f3432015-10-17 14:00:33 -070013
Devon Carew26ceabe2014-12-11 11:44:53 -080014void defineTests() {
15 group('ThrottlingBucket', () {
16 test('can send', () {
Nate Boschc2051dd2020-01-13 13:15:22 -080017 var bucket = ThrottlingBucket(20);
Devon Carew26ceabe2014-12-11 11:44:53 -080018 expect(bucket.removeDrop(), true);
19 });
20
21 test('doesn\'t send too many', () {
Nate Boschc2051dd2020-01-13 13:15:22 -080022 var bucket = ThrottlingBucket(20);
23 for (var i = 0; i < 20; i++) {
Devon Carew26ceabe2014-12-11 11:44:53 -080024 expect(bucket.removeDrop(), true);
25 }
26 expect(bucket.removeDrop(), false);
27 });
Devon Carew7a9ce092021-03-30 10:44:17 -070028
29 test('does re-send after throttling', () async {
30 var bucket = ThrottlingBucket(20);
31 for (var i = 0; i < 20; i++) {
32 expect(bucket.removeDrop(), true);
33 }
34 expect(bucket.removeDrop(), false);
35
36 // TODO: Re-write to use package:fake_async.
37 await Future.delayed(Duration(milliseconds: 1500));
38 expect(bucket.removeDrop(), true);
39 });
Devon Carew26ceabe2014-12-11 11:44:53 -080040 });
41
Devon Carewe328cc22014-12-18 13:10:45 -080042 group('AnalyticsImpl', () {
Devon Carewc7dd6822017-06-22 19:55:46 -070043 test('trackingId', () {
Nate Boschc2051dd2020-01-13 13:15:22 -080044 var mock = createMock();
Devon Carewc7dd6822017-06-22 19:55:46 -070045 expect(mock.trackingId, isNotNull);
46 });
47
48 test('applicationName', () {
Nate Boschc2051dd2020-01-13 13:15:22 -080049 var mock = createMock();
Devon Carewc7dd6822017-06-22 19:55:46 -070050 expect(mock.applicationName, isNotNull);
51 });
52
53 test('applicationVersion', () {
Nate Boschc2051dd2020-01-13 13:15:22 -080054 var mock = createMock();
Devon Carewc7dd6822017-06-22 19:55:46 -070055 expect(mock.applicationVersion, isNotNull);
56 });
57
Devon Carewe328cc22014-12-18 13:10:45 -080058 test('respects disabled', () {
Nate Boschc2051dd2020-01-13 13:15:22 -080059 var mock = createMock();
Devon Carewd6a97072016-04-25 22:15:44 -070060 mock.enabled = false;
Devon Carewe328cc22014-12-18 13:10:45 -080061 mock.sendException('FooBar exception');
Devon Carewd6a97072016-04-25 22:15:44 -070062 expect(mock.enabled, false);
Devon Carewe328cc22014-12-18 13:10:45 -080063 expect(mock.mockPostHandler.sentValues, isEmpty);
64 });
65
Devon Carewd6a97072016-04-25 22:15:44 -070066 test('firstRun', () {
Nate Boschc2051dd2020-01-13 13:15:22 -080067 var mock = createMock();
Devon Carewd6a97072016-04-25 22:15:44 -070068 expect(mock.firstRun, true);
69 mock = createMock(props: {'firstRun': false});
70 expect(mock.firstRun, false);
Devon Carewe328cc22014-12-18 13:10:45 -080071 });
72
Sigurd Meldgaard1c3393d2021-02-08 10:46:32 +010073 test('setSessionValue', () async {
Nate Boschc2051dd2020-01-13 13:15:22 -080074 var mock = createMock();
Sigurd Meldgaard1c3393d2021-02-08 10:46:32 +010075 await mock.sendScreenView('foo');
Devon Carewe328cc22014-12-18 13:10:45 -080076 hasnt(mock.last, 'val');
77 mock.setSessionValue('val', 'ue');
Sigurd Meldgaard1c3393d2021-02-08 10:46:32 +010078 await mock.sendScreenView('bar');
Devon Carewe328cc22014-12-18 13:10:45 -080079 has(mock.last, 'val');
Devon Carew9243d312014-12-18 13:20:20 -080080 mock.setSessionValue('val', null);
Sigurd Meldgaard1c3393d2021-02-08 10:46:32 +010081 await mock.sendScreenView('baz');
Devon Carew9243d312014-12-18 13:20:20 -080082 hasnt(mock.last, 'val');
Devon Carewe328cc22014-12-18 13:10:45 -080083 });
Devon Carew7d1ae962015-01-27 11:23:07 -080084
85 test('waitForLastPing', () {
Nate Boschc2051dd2020-01-13 13:15:22 -080086 var mock = createMock();
Devon Carew7d1ae962015-01-27 11:23:07 -080087 mock.sendScreenView('foo');
88 mock.sendScreenView('bar');
89 mock.sendScreenView('baz');
Nate Bosch2075fe92019-12-09 13:28:45 -080090 return mock.waitForLastPing(timeout: Duration(milliseconds: 100));
Devon Carew7d1ae962015-01-27 11:23:07 -080091 });
Yegor Jbanov021664e2017-06-15 12:37:01 -070092
93 group('clientId', () {
94 test('is available immediately', () {
Nate Boschc2051dd2020-01-13 13:15:22 -080095 var mock = createMock();
Yegor Jbanov021664e2017-06-15 12:37:01 -070096 expect(mock.clientId, isNotEmpty);
97 });
98
99 test('is memoized', () {
Nate Boschc2051dd2020-01-13 13:15:22 -0800100 var mock = createMock();
Yegor Jbanov021664e2017-06-15 12:37:01 -0700101 final value1 = mock.clientId;
102 final value2 = mock.clientId;
103 expect(value1, isNotEmpty);
104 expect(value1, value2);
105 });
106
107 test('is stored in properties', () {
Nate Boschc2051dd2020-01-13 13:15:22 -0800108 var mock = createMock();
Yegor Jbanov021664e2017-06-15 12:37:01 -0700109 expect(mock.properties['clientId'], isNull);
110 final value = mock.clientId;
111 expect(mock.properties['clientId'], value);
112 });
113 });
Devon Carewe328cc22014-12-18 13:10:45 -0800114 });
115
Devon Carewe328cc22014-12-18 13:10:45 -0800116 group('postEncode', () {
117 test('simple', () {
Nate Boschc2051dd2020-01-13 13:15:22 -0800118 var map = <String, dynamic>{'foo': 'bar', 'baz': 'qux norf'};
Devon Carewe328cc22014-12-18 13:10:45 -0800119 expect(postEncode(map), 'foo=bar&baz=qux%20norf');
Devon Carew26ceabe2014-12-11 11:44:53 -0800120 });
121 });
122}