diff --git a/packages/app_center/lib/snapd/snap_data.freezed.dart b/packages/app_center/lib/snapd/snap_data.freezed.dart
index 97d2064b0..bf2ac41ca 100644
--- a/packages/app_center/lib/snapd/snap_data.freezed.dart
+++ b/packages/app_center/lib/snapd/snap_data.freezed.dart
@@ -76,6 +76,9 @@ abstract class $SnapDataCopyWith<$Res> {
Snap? storeSnap,
String? selectedChannel,
String? activeChangeId});
+
+ $SnapCopyWith<$Res>? get localSnap;
+ $SnapCopyWith<$Res>? get storeSnap;
}
/// @nodoc
@@ -120,6 +123,30 @@ class _$SnapDataCopyWithImpl<$Res, $Val extends SnapData>
as String?,
) as $Val);
}
+
+ @override
+ @pragma('vm:prefer-inline')
+ $SnapCopyWith<$Res>? get localSnap {
+ if (_value.localSnap == null) {
+ return null;
+ }
+
+ return $SnapCopyWith<$Res>(_value.localSnap!, (value) {
+ return _then(_value.copyWith(localSnap: value) as $Val);
+ });
+ }
+
+ @override
+ @pragma('vm:prefer-inline')
+ $SnapCopyWith<$Res>? get storeSnap {
+ if (_value.storeSnap == null) {
+ return null;
+ }
+
+ return $SnapCopyWith<$Res>(_value.storeSnap!, (value) {
+ return _then(_value.copyWith(storeSnap: value) as $Val);
+ });
+ }
}
/// @nodoc
@@ -136,6 +163,11 @@ abstract class _$$SnapDataImplCopyWith<$Res>
Snap? storeSnap,
String? selectedChannel,
String? activeChangeId});
+
+ @override
+ $SnapCopyWith<$Res>? get localSnap;
+ @override
+ $SnapCopyWith<$Res>? get storeSnap;
}
/// @nodoc
diff --git a/packages/app_center/lib/snapd/snap_page.dart b/packages/app_center/lib/snapd/snap_page.dart
index 0a550a653..901a1c686 100644
--- a/packages/app_center/lib/snapd/snap_page.dart
+++ b/packages/app_center/lib/snapd/snap_page.dart
@@ -109,7 +109,7 @@ class _SnapView extends StatelessWidget {
children: [
if (snapData.snap.website?.isNotEmpty ?? false)
'${l10n.snapPageDeveloperWebsiteLabel}',
- if ((snapData.snap.contact?.isNotEmpty ?? false) &&
+ if ((snapData.snap.contact.isNotEmpty) &&
snapData.snap.publisher != null)
'${l10n.snapPageContactPublisherLabel(snapData.snap.publisher!.displayName)}',
]
@@ -649,7 +649,7 @@ class _ChannelDropdownEntry extends StatelessWidget {
channelEntry.key,
channelEntry.value.version,
DateFormat.yMd().format(channelEntry.value.releasedAt),
- ].map((e) => Text(e, maxLines: 1)).toList(),
+ ].nonNulls.map((e) => Text(e, maxLines: 1)).toList(),
),
),
],
diff --git a/packages/app_center/pubspec.yaml b/packages/app_center/pubspec.yaml
index 9733f3f98..0d701a2a4 100644
--- a/packages/app_center/pubspec.yaml
+++ b/packages/app_center/pubspec.yaml
@@ -40,7 +40,10 @@ dependencies:
riverpod_annotation: ^2.3.5
shimmer: ^3.0.0
snapcraft_launcher: ^0.1.0
- snapd: ^0.4.14
+ snapd:
+ git:
+ url: https://github.com/spydon/snapd.dart
+ ref: refactor/use-freezed
snowball_stemmer: ^0.1.0
ubuntu_localizations: ^0.3.6
ubuntu_logger: ^0.1.1
diff --git a/packages/app_center/test/app_card_test.dart b/packages/app_center/test/app_card_test.dart
index 5f30819e6..301e3ba3b 100644
--- a/packages/app_center/test/app_card_test.dart
+++ b/packages/app_center/test/app_card_test.dart
@@ -2,7 +2,6 @@ import 'package:app_center/widgets/widgets.dart';
import 'package:app_center_ratings_client/app_center_ratings_client.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
-import 'package:snapd/snapd.dart';
import 'package:ubuntu_service/ubuntu_service.dart';
import 'test_utils.dart';
@@ -14,10 +13,17 @@ const snapRating = Rating(
ratingsBand: RatingsBand.good,
);
-const snap = Snap(
+final snap = createSnap(
name: 'testsnap',
id: 'r4LxMVp7zWramXsJQAKdamxy6TAWlaDD',
summary: 'Its a summary!',
+ revision: '',
+ version: '',
+ channel: '',
+ base: '',
+ contact: '',
+ description: '',
+ type: '',
);
void main() {
diff --git a/packages/app_center/test/games_page_test.dart b/packages/app_center/test/games_page_test.dart
index 02ca35a64..c38b7b482 100644
--- a/packages/app_center/test/games_page_test.dart
+++ b/packages/app_center/test/games_page_test.dart
@@ -22,34 +22,36 @@ void main() {
tearDown(resetAllServices);
final mockSearchProvider = createMockSnapSearchProvider({
- const SnapSearchParameters(query: 'testsn'): const [
- Snap(name: 'testsnap', title: 'Test Snap', downloadSize: 3),
- Snap(name: 'testsnap2', title: 'Another Test Snap', downloadSize: 1),
- Snap(name: 'testsnap3', title: 'Yet Another Test Snap', downloadSize: 2),
+ const SnapSearchParameters(query: 'testsn'): [
+ createSnap(name: 'testsnap', title: 'Test Snap', downloadSize: 3),
+ createSnap(
+ name: 'testsnap2', title: 'Another Test Snap', downloadSize: 1),
+ createSnap(
+ name: 'testsnap3', title: 'Yet Another Test Snap', downloadSize: 2),
],
const SnapSearchParameters(
category: SnapCategoryEnum.games,
- ): const [
- Snap(
+ ): [
+ createSnap(
name: 'testsnap4',
title: 'A Cool Game',
summary: 'This is a really cool game',
downloadSize: 2,
media: [
- SnapMedia(type: 'screenshot', url: 'https://example.com'),
+ const SnapMedia(type: 'screenshot', url: 'https://example.com'),
],
),
- Snap(
+ createSnap(
name: 'testsnap5',
summary: 'This is another really cool game',
downloadSize: 3,
media: [
- SnapMedia(type: 'screenshot', url: 'https://example.com'),
+ const SnapMedia(type: 'screenshot', url: 'https://example.com'),
],
),
],
- const SnapSearchParameters(category: SnapCategoryEnum.education): const [
- Snap(name: 'educational-snap', title: 'Educational Snap'),
+ const SnapSearchParameters(category: SnapCategoryEnum.education): [
+ createSnap(name: 'educational-snap', title: 'Educational Snap'),
],
});
diff --git a/packages/app_center/test/manage_model_test.dart b/packages/app_center/test/manage_model_test.dart
index f9ae7462c..4d39c2721 100644
--- a/packages/app_center/test/manage_model_test.dart
+++ b/packages/app_center/test/manage_model_test.dart
@@ -1,13 +1,15 @@
import 'package:app_center/manage/manage_model.dart';
import 'package:flutter_test/flutter_test.dart';
-import 'package:snapd/snapd.dart';
import 'test_utils.dart';
void main() {
test('no updates available', () async {
final snapd = registerMockSnapdService(
- installedSnaps: const [Snap(name: 'firefox'), Snap(name: 'thunderbird')],
+ installedSnaps: [
+ createSnap(name: 'firefox'),
+ createSnap(name: 'thunderbird')
+ ],
);
final updatesModel = createMockUpdatesModel();
final model = ManageModel(snapd: snapd, updatesModel: updatesModel);
@@ -15,13 +17,16 @@ void main() {
expect(
model.nonRefreshableSnaps,
- equals(const [Snap(name: 'firefox'), Snap(name: 'thunderbird')]),
+ equals([createSnap(name: 'firefox'), createSnap(name: 'thunderbird')]),
);
expect(model.refreshableSnaps, isEmpty);
});
test('update available', () async {
final snapd = registerMockSnapdService(
- installedSnaps: const [Snap(name: 'firefox'), Snap(name: 'thunderbird')],
+ installedSnaps: [
+ createSnap(name: 'firefox'),
+ createSnap(name: 'thunderbird')
+ ],
);
final updatesModel =
createMockUpdatesModel(refreshableSnapNames: ['firefox']);
@@ -30,8 +35,11 @@ void main() {
expect(
model.nonRefreshableSnaps,
- equals(const [Snap(name: 'thunderbird')]),
+ equals([createSnap(name: 'thunderbird')]),
+ );
+ expect(
+ model.refreshableSnaps,
+ equals([createSnap(name: 'firefox')]),
);
- expect(model.refreshableSnaps, equals(const [Snap(name: 'firefox')]));
});
}
diff --git a/packages/app_center/test/manage_page_test.dart b/packages/app_center/test/manage_page_test.dart
index b0a9e468c..ef2af9adc 100644
--- a/packages/app_center/test/manage_page_test.dart
+++ b/packages/app_center/test/manage_page_test.dart
@@ -15,14 +15,14 @@ import 'package:yaru_test/yaru_test.dart';
import 'test_utils.dart';
void main() {
- const nonRefreshableSnaps = [
- Snap(
+ final nonRefreshableSnaps = [
+ createSnap(
name: 'testsnap',
title: 'Test Snap',
version: '1.0',
channel: 'latest/stable',
),
- Snap(
+ createSnap(
name: 'testsnap2',
title: 'Another Test Snap',
version: '1.5',
@@ -30,7 +30,7 @@ void main() {
),
];
final refreshableSnaps = [
- Snap(
+ createSnap(
name: 'testsnap3',
title: 'Snap with an update',
version: '2.0',
@@ -240,9 +240,12 @@ void main() {
isBusy: true,
);
final mockChange = SnapdChange(
+ id: '',
spawnTime: DateTime(1970),
kind: 'refresh-snap',
- tasks: [SnapdTask(progress: const SnapdTaskProgress(done: 1, total: 4))],
+ tasks: [
+ const SnapdTask(id: '', progress: SnapdTaskProgress(done: 1, total: 4)),
+ ],
);
await tester.pumpApp(
(_) => ProviderScope(
@@ -298,7 +301,7 @@ void main() {
),
),
activeChangeProvider.overrideWith(
- (_, __) => SnapdChange(spawnTime: DateTime(1970)),
+ (_, __) => SnapdChange(id: '', spawnTime: DateTime(1970)),
),
updatesModelProvider.overrideWith((_) => mockUpdatesModel),
],
diff --git a/packages/app_center/test/multisnap_model_test.dart b/packages/app_center/test/multisnap_model_test.dart
index ffa06204c..f3e83e1f8 100644
--- a/packages/app_center/test/multisnap_model_test.dart
+++ b/packages/app_center/test/multisnap_model_test.dart
@@ -6,10 +6,10 @@ import 'package:snapd/snapd.dart';
import 'test_utils.dart';
-final storeSnap = Snap(
+final storeSnap = createSnap(
name: 'testsnap',
title: 'Testsnap',
- publisher: const SnapPublisher(displayName: 'testPublisher'),
+ publisher: const SnapPublisher(id: '', displayName: 'testPublisher'),
version: '1.0.0',
website: 'https://example.com',
confinement: SnapConfinement.strict,
diff --git a/packages/app_center/test/ratings_model_test.dart b/packages/app_center/test/ratings_model_test.dart
index d41447655..e9d1c5341 100644
--- a/packages/app_center/test/ratings_model_test.dart
+++ b/packages/app_center/test/ratings_model_test.dart
@@ -3,13 +3,12 @@ import 'package:app_center_ratings_client/app_center_ratings_client.dart';
import 'package:clock/clock.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
-import 'package:snapd/snapd.dart';
import 'package:ubuntu_service/ubuntu_service.dart';
import 'test_utils.dart';
void main() {
- const snap = Snap(
+ final snap = createSnap(
name: 'firefox',
id: 'firefox',
revision: '42',
diff --git a/packages/app_center/test/search_field_test.dart b/packages/app_center/test/search_field_test.dart
index 4491eda24..7cec55ab4 100644
--- a/packages/app_center/test/search_field_test.dart
+++ b/packages/app_center/test/search_field_test.dart
@@ -6,7 +6,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
-import 'package:snapd/snapd.dart';
import 'test_utils.dart';
@@ -18,10 +17,10 @@ class MockStringCallback extends Mock implements StringCallback {}
void main() {
final mockSnapSearchProvider = createMockSnapSearchProvider({
- const SnapSearchParameters(query: 'testsn'): const [
- Snap(name: 'testsnap', title: 'Test Snap'),
- Snap(name: 'testsnap2', title: 'Another Test Snap'),
- ],
+ const SnapSearchParameters(query: 'testsn'): [
+ createSnap(name: 'testsnap', title: 'Test Snap'),
+ createSnap(name: 'testsnap2', title: 'Another Test Snap'),
+ ]
});
final mockDebSearchProvider = createMockDebSearchProvider({
diff --git a/packages/app_center/test/search_page_test.dart b/packages/app_center/test/search_page_test.dart
index d0418b99c..d5c906ec1 100644
--- a/packages/app_center/test/search_page_test.dart
+++ b/packages/app_center/test/search_page_test.dart
@@ -7,7 +7,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
-import 'package:snapd/snapd.dart';
import 'package:ubuntu_service/ubuntu_service.dart';
import 'package:ubuntu_widgets/ubuntu_widgets.dart';
@@ -26,23 +25,26 @@ void main() {
tearDown(resetAllServices);
final mockSearchProvider = createMockSnapSearchProvider({
- const SnapSearchParameters(query: 'testsn'): const [
- Snap(name: 'testsnap', title: 'Test Snap', downloadSize: 3),
- Snap(name: 'testsnap2', title: 'Another Test Snap', downloadSize: 1),
- Snap(name: 'testsnap3', title: 'Yet Another Test Snap', downloadSize: 2),
+ const SnapSearchParameters(query: 'testsn'): [
+ createSnap(name: 'testsnap', title: 'Test Snap', downloadSize: 3),
+ createSnap(
+ name: 'testsnap2', title: 'Another Test Snap', downloadSize: 1),
+ createSnap(
+ name: 'testsnap3', title: 'Yet Another Test Snap', downloadSize: 2),
],
const SnapSearchParameters(
query: 'testsn',
category: SnapCategoryEnum.development,
- ): const [
- Snap(name: 'testsnap3', title: 'Yet Another Test Snap', downloadSize: 2),
+ ): [
+ createSnap(
+ name: 'testsnap3', title: 'Yet Another Test Snap', downloadSize: 2),
],
- const SnapSearchParameters(category: SnapCategoryEnum.education): const [
- Snap(name: 'educational-snap', title: 'Educational Snap'),
+ const SnapSearchParameters(category: SnapCategoryEnum.education): [
+ createSnap(name: 'educational-snap', title: 'Educational Snap'),
],
- const SnapSearchParameters(category: SnapCategoryEnum.gameDev): const [
- Snap(name: 'game-engine', title: 'Game Engine'),
- Snap(name: 'image-processor', title: 'Image Processor'),
+ const SnapSearchParameters(category: SnapCategoryEnum.gameDev): [
+ createSnap(name: 'game-engine', title: 'Game Engine'),
+ createSnap(name: 'image-processor', title: 'Image Processor'),
],
});
final multiSnapModel = MockMultiSnapModel();
diff --git a/packages/app_center/test/snap_launcher_test.dart b/packages/app_center/test/snap_launcher_test.dart
index f3b9acb3b..fb61bc481 100644
--- a/packages/app_center/test/snap_launcher_test.dart
+++ b/packages/app_center/test/snap_launcher_test.dart
@@ -6,11 +6,12 @@ import 'package:snapcraft_launcher/snapcraft_launcher.dart';
import 'package:snapd/snapd.dart';
import 'snap_launcher_test.mocks.dart';
+import 'test_utils.dart';
@GenerateMocks([PrivilegedDesktopLauncher])
void main() {
test('launcher unavailable', () {
- const snap = Snap(name: '');
+ final snap = createSnap(name: '');
final launcher = MockPrivilegedDesktopLauncher();
when(launcher.isAvailable).thenReturn(false);
@@ -19,11 +20,11 @@ void main() {
});
test('desktop snap', () {
- const snap = Snap(
+ final snap = createSnap(
name: 'desktopsnap',
type: 'app',
apps: [
- SnapApp(
+ const SnapApp(
snap: 'desktopsnap',
name: 'desktopsnapapp',
desktopFile: '/foo/bar/desktopsnapapp.desktop',
@@ -42,7 +43,7 @@ void main() {
});
test('non-desktop snap', () {
- const snap = Snap(name: 'nondesktopsnap');
+ final snap = createSnap(name: 'nondesktopsnap');
final launcher = MockPrivilegedDesktopLauncher();
when(launcher.isAvailable).thenReturn(true);
diff --git a/packages/app_center/test/snap_model_test.dart b/packages/app_center/test/snap_model_test.dart
index 5eeb23bf9..18bd40ad1 100644
--- a/packages/app_center/test/snap_model_test.dart
+++ b/packages/app_center/test/snap_model_test.dart
@@ -9,10 +9,10 @@ import 'package:ubuntu_service/ubuntu_service.dart';
import 'test_utils.dart';
-const localSnap = Snap(
+final localSnap = createSnap(
name: 'testsnap',
title: 'Testsnap',
- publisher: SnapPublisher(displayName: 'testPublisher'),
+ publisher: const SnapPublisher(id: '', displayName: 'testPublisher'),
version: '2.0.0',
website: 'https://example.com',
confinement: SnapConfinement.classic,
@@ -22,10 +22,10 @@ const localSnap = Snap(
channel: 'latest/edge',
);
-final storeSnap = Snap(
+final storeSnap = createSnap(
name: 'testsnap',
title: 'Testsnap',
- publisher: const SnapPublisher(displayName: 'testPublisher'),
+ publisher: const SnapPublisher(id: '', displayName: 'testPublisher'),
version: '1.0.0',
website: 'https://example.com',
confinement: SnapConfinement.strict,
@@ -218,7 +218,7 @@ void main() {
localSnap: localSnap,
storeSnap: storeSnap,
changes: [
- SnapdChange(spawnTime: DateTime(1970), ready: true),
+ SnapdChange(id: '', spawnTime: DateTime(1970), ready: true),
],
);
@@ -274,16 +274,17 @@ void main() {
final testCases = [
(
name: 'no tasks',
- change: SnapdChange(spawnTime: DateTime(1970)),
+ change: SnapdChange(id: '', spawnTime: DateTime(1970)),
expectedProgress: 0.0,
),
(
name: '60% completed',
change: SnapdChange(
+ id: '',
spawnTime: DateTime(1970),
- tasks: [
- SnapdTask(progress: const SnapdTaskProgress(done: 2, total: 3)),
- SnapdTask(progress: const SnapdTaskProgress(done: 4, total: 7)),
+ tasks: const [
+ SnapdTask(id: '', progress: SnapdTaskProgress(done: 2, total: 3)),
+ SnapdTask(id: '', progress: SnapdTaskProgress(done: 4, total: 7)),
],
),
expectedProgress: 0.6,
diff --git a/packages/app_center/test/snap_page_test.dart b/packages/app_center/test/snap_page_test.dart
index 8da17f06e..d66e6e499 100644
--- a/packages/app_center/test/snap_page_test.dart
+++ b/packages/app_center/test/snap_page_test.dart
@@ -23,10 +23,10 @@ const snapRating = Rating(
ratingsBand: RatingsBand.good,
);
-final localSnap = Snap(
+final localSnap = createSnap(
name: 'testsnap',
title: 'Testsnap',
- publisher: const SnapPublisher(displayName: 'testPublisher'),
+ publisher: const SnapPublisher(id: '', displayName: 'testPublisher'),
version: '2.0.0',
revision: '42',
website: 'https://example.com',
@@ -39,10 +39,10 @@ final localSnap = Snap(
id: 'r4LxMVp7zWramXsJQAKdamxy6TAWlaDD',
);
-final storeSnap = Snap(
+final storeSnap = createSnap(
name: 'testsnap',
title: 'Testsnap',
- publisher: const SnapPublisher(displayName: 'testPublisher'),
+ publisher: const SnapPublisher(id: '', displayName: 'testPublisher'),
version: '1.0.0',
revision: '42',
website: 'https://example.com',
diff --git a/packages/app_center/test/snapd_cache_test.mocks.dart b/packages/app_center/test/snapd_cache_test.mocks.dart
index 4d3d6c515..c7e88d57c 100644
--- a/packages/app_center/test/snapd_cache_test.mocks.dart
+++ b/packages/app_center/test/snapd_cache_test.mocks.dart
@@ -83,6 +83,15 @@ class MockSnapdClient extends _i1.Mock implements _i2.SnapdClient {
_i1.throwOnMissingStub(this);
}
+ @override
+ set userAgent(String? _userAgent) => super.noSuchMethod(
+ Invocation.setter(
+ #userAgent,
+ _userAgent,
+ ),
+ returnValueForMissingStub: null,
+ );
+
@override
bool get allowInteraction => (super.noSuchMethod(
Invocation.getter(#allowInteraction),
@@ -98,15 +107,6 @@ class MockSnapdClient extends _i1.Mock implements _i2.SnapdClient {
returnValueForMissingStub: null,
);
- @override
- set userAgent(String? value) => super.noSuchMethod(
- Invocation.setter(
- #userAgent,
- value,
- ),
- returnValueForMissingStub: null,
- );
-
@override
_i3.Future loadAuthorization({String? path}) => (super.noSuchMethod(
Invocation.method(
@@ -192,15 +192,15 @@ class MockSnapdClient extends _i1.Mock implements _i2.SnapdClient {
) as _i3.Future>);
@override
- _i3.Future> getCategories() =>
+ _i3.Future> getCategories() =>
(super.noSuchMethod(
Invocation.method(
#getCategories,
[],
),
- returnValue: _i3.Future>.value(
- <_i2.SnapdCategoryDetails>[]),
- ) as _i3.Future>);
+ returnValue: _i3.Future>.value(
+ <_i2.SnapCategoryDetails>[]),
+ ) as _i3.Future>);
@override
_i3.Future<_i2.SnapdConnectionsResponse> getConnections({
@@ -356,6 +356,24 @@ class MockSnapdClient extends _i1.Mock implements _i2.SnapdClient {
returnValue: _i3.Future>.value(<_i2.Snap>[]),
) as _i3.Future>);
+ @override
+ _i3.Future