Devon Carew | 26ceabe | 2014-12-11 11:44:53 -0800 | [diff] [blame] | 1 | // 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 | |
| 5 | library usage.impl_test; |
| 6 | |
Devon Carew | 590f343 | 2015-10-17 14:00:33 -0700 | [diff] [blame] | 7 | import 'package:test/test.dart'; |
Devon Carew | 26ceabe | 2014-12-11 11:44:53 -0800 | [diff] [blame] | 8 | import 'package:usage/src/usage_impl.dart'; |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 9 | |
| 10 | import 'src/common.dart'; |
Devon Carew | 26ceabe | 2014-12-11 11:44:53 -0800 | [diff] [blame] | 11 | |
Mike Fairhurst | 43af9e6 | 2018-02-19 15:00:30 -0800 | [diff] [blame] | 12 | void main() => defineTests(); |
Devon Carew | 590f343 | 2015-10-17 14:00:33 -0700 | [diff] [blame] | 13 | |
Devon Carew | 26ceabe | 2014-12-11 11:44:53 -0800 | [diff] [blame] | 14 | void defineTests() { |
| 15 | group('ThrottlingBucket', () { |
| 16 | test('can send', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 17 | var bucket = ThrottlingBucket(20); |
Devon Carew | 26ceabe | 2014-12-11 11:44:53 -0800 | [diff] [blame] | 18 | expect(bucket.removeDrop(), true); |
| 19 | }); |
| 20 | |
| 21 | test('doesn\'t send too many', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 22 | var bucket = ThrottlingBucket(20); |
| 23 | for (var i = 0; i < 20; i++) { |
Devon Carew | 26ceabe | 2014-12-11 11:44:53 -0800 | [diff] [blame] | 24 | expect(bucket.removeDrop(), true); |
| 25 | } |
| 26 | expect(bucket.removeDrop(), false); |
| 27 | }); |
Devon Carew | 7a9ce09 | 2021-03-30 10:44:17 -0700 | [diff] [blame] | 28 | |
| 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 Carew | 26ceabe | 2014-12-11 11:44:53 -0800 | [diff] [blame] | 40 | }); |
| 41 | |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 42 | group('AnalyticsImpl', () { |
Devon Carew | c7dd682 | 2017-06-22 19:55:46 -0700 | [diff] [blame] | 43 | test('trackingId', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 44 | var mock = createMock(); |
Devon Carew | c7dd682 | 2017-06-22 19:55:46 -0700 | [diff] [blame] | 45 | expect(mock.trackingId, isNotNull); |
| 46 | }); |
| 47 | |
| 48 | test('applicationName', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 49 | var mock = createMock(); |
Devon Carew | c7dd682 | 2017-06-22 19:55:46 -0700 | [diff] [blame] | 50 | expect(mock.applicationName, isNotNull); |
| 51 | }); |
| 52 | |
| 53 | test('applicationVersion', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 54 | var mock = createMock(); |
Devon Carew | c7dd682 | 2017-06-22 19:55:46 -0700 | [diff] [blame] | 55 | expect(mock.applicationVersion, isNotNull); |
| 56 | }); |
| 57 | |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 58 | test('respects disabled', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 59 | var mock = createMock(); |
Devon Carew | d6a9707 | 2016-04-25 22:15:44 -0700 | [diff] [blame] | 60 | mock.enabled = false; |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 61 | mock.sendException('FooBar exception'); |
Devon Carew | d6a9707 | 2016-04-25 22:15:44 -0700 | [diff] [blame] | 62 | expect(mock.enabled, false); |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 63 | expect(mock.mockPostHandler.sentValues, isEmpty); |
| 64 | }); |
| 65 | |
Devon Carew | d6a9707 | 2016-04-25 22:15:44 -0700 | [diff] [blame] | 66 | test('firstRun', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 67 | var mock = createMock(); |
Devon Carew | d6a9707 | 2016-04-25 22:15:44 -0700 | [diff] [blame] | 68 | expect(mock.firstRun, true); |
| 69 | mock = createMock(props: {'firstRun': false}); |
| 70 | expect(mock.firstRun, false); |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 71 | }); |
| 72 | |
Sigurd Meldgaard | 1c3393d | 2021-02-08 10:46:32 +0100 | [diff] [blame] | 73 | test('setSessionValue', () async { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 74 | var mock = createMock(); |
Sigurd Meldgaard | 1c3393d | 2021-02-08 10:46:32 +0100 | [diff] [blame] | 75 | await mock.sendScreenView('foo'); |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 76 | hasnt(mock.last, 'val'); |
| 77 | mock.setSessionValue('val', 'ue'); |
Sigurd Meldgaard | 1c3393d | 2021-02-08 10:46:32 +0100 | [diff] [blame] | 78 | await mock.sendScreenView('bar'); |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 79 | has(mock.last, 'val'); |
Devon Carew | 9243d31 | 2014-12-18 13:20:20 -0800 | [diff] [blame] | 80 | mock.setSessionValue('val', null); |
Sigurd Meldgaard | 1c3393d | 2021-02-08 10:46:32 +0100 | [diff] [blame] | 81 | await mock.sendScreenView('baz'); |
Devon Carew | 9243d31 | 2014-12-18 13:20:20 -0800 | [diff] [blame] | 82 | hasnt(mock.last, 'val'); |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 83 | }); |
Devon Carew | 7d1ae96 | 2015-01-27 11:23:07 -0800 | [diff] [blame] | 84 | |
| 85 | test('waitForLastPing', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 86 | var mock = createMock(); |
Devon Carew | 7d1ae96 | 2015-01-27 11:23:07 -0800 | [diff] [blame] | 87 | mock.sendScreenView('foo'); |
| 88 | mock.sendScreenView('bar'); |
| 89 | mock.sendScreenView('baz'); |
Nate Bosch | 2075fe9 | 2019-12-09 13:28:45 -0800 | [diff] [blame] | 90 | return mock.waitForLastPing(timeout: Duration(milliseconds: 100)); |
Devon Carew | 7d1ae96 | 2015-01-27 11:23:07 -0800 | [diff] [blame] | 91 | }); |
Yegor Jbanov | 021664e | 2017-06-15 12:37:01 -0700 | [diff] [blame] | 92 | |
| 93 | group('clientId', () { |
| 94 | test('is available immediately', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 95 | var mock = createMock(); |
Yegor Jbanov | 021664e | 2017-06-15 12:37:01 -0700 | [diff] [blame] | 96 | expect(mock.clientId, isNotEmpty); |
| 97 | }); |
| 98 | |
| 99 | test('is memoized', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 100 | var mock = createMock(); |
Yegor Jbanov | 021664e | 2017-06-15 12:37:01 -0700 | [diff] [blame] | 101 | 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 Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 108 | var mock = createMock(); |
Yegor Jbanov | 021664e | 2017-06-15 12:37:01 -0700 | [diff] [blame] | 109 | expect(mock.properties['clientId'], isNull); |
| 110 | final value = mock.clientId; |
| 111 | expect(mock.properties['clientId'], value); |
| 112 | }); |
| 113 | }); |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 114 | }); |
| 115 | |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 116 | group('postEncode', () { |
| 117 | test('simple', () { |
Nate Bosch | c2051dd | 2020-01-13 13:15:22 -0800 | [diff] [blame] | 118 | var map = <String, dynamic>{'foo': 'bar', 'baz': 'qux norf'}; |
Devon Carew | e328cc2 | 2014-12-18 13:10:45 -0800 | [diff] [blame] | 119 | expect(postEncode(map), 'foo=bar&baz=qux%20norf'); |
Devon Carew | 26ceabe | 2014-12-11 11:44:53 -0800 | [diff] [blame] | 120 | }); |
| 121 | }); |
| 122 | } |