feat: import Chinese-localized Buzz source snapshot
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled
Docker image / Build (linux/amd64) (push) Has been cancelled
Docker image / Build (linux/arm64) (push) Has been cancelled
Docker image / Merge release multi-arch manifest (push) Has been cancelled
Docker image / Merge debug multi-arch manifest (push) Has been cancelled
Docker image / Build public push gateway (linux/amd64) (push) Has been cancelled
Docker image / Build public push gateway (linux/arm64) (push) Has been cancelled
Docker image / Publish public push gateway image (push) Has been cancelled
Sprig image / Build (linux/amd64) (push) Has been cancelled
Sprig image / Build (linux/arm64) (push) Has been cancelled
Sprig image / Merge multi-arch manifest (push) Has been cancelled
Harbor Buzz Orchestra / Python tests and lint (push) Has been cancelled
CI / Detect Changed Paths (push) Has been cancelled
CI / Rust Lint (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Desktop Core (push) Has been cancelled
CI / Desktop Smoke E2E (1) (push) Has been cancelled
CI / Desktop Smoke E2E (2) (push) Has been cancelled
CI / Desktop Smoke E2E (3) (push) Has been cancelled
CI / Desktop Smoke E2E (4) (push) Has been cancelled
CI / Desktop (push) Has been cancelled
CI / Desktop E2E Relay (push) Has been cancelled
CI / Desktop E2E Integration (1/2) (push) Has been cancelled
CI / Desktop E2E Integration (2/2) (push) Has been cancelled
CI / Desktop E2E Integration (push) Has been cancelled
CI / Backend Integration (relay e2e) (push) Has been cancelled
CI / Relay E2E (push) Has been cancelled
CI / Web (push) Has been cancelled
CI / Mobile (push) Has been cancelled
CI / Security (push) Has been cancelled
CI / Dead Token Reference Guard (push) Has been cancelled
CI / Server Cross-Compile (aarch64-unknown-linux-musl) (push) Has been cancelled
CI / Server Cross-Compile (x86_64-unknown-linux-musl) (push) Has been cancelled
CI / Windows Rust (x86_64-pc-windows-msvc) (push) Has been cancelled
CI / Desktop Build (macOS) (push) Has been cancelled
helm chart / lint + unittest + render matrix (push) Has been cancelled
helm chart / install on kind (gated) (push) Has been cancelled
helm chart / publish chart to GHCR (push) Has been cancelled
Mesh Lifecycle / Relay-Driven Mesh Lifecycle Smoke (push) Has been cancelled
Sprig / Build (aarch64-unknown-linux-musl) (push) Has been cancelled
Sprig / Build (x86_64-unknown-linux-musl) (push) Has been cancelled
Sprig / Publish rolling release (push) Has been cancelled
Sprig / Publish tagged release (push) Has been cancelled
Signed-off-by: cls_宁波本机 <908705107@qq.com>
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import 'package:buzz/shared/community/community_icon_provider.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http/testing.dart' as http_testing;
|
||||
|
||||
void main() {
|
||||
test('fetches the NIP-11 icon over the relay HTTP URL', () async {
|
||||
late http.Request capturedRequest;
|
||||
final client = http_testing.MockClient((request) async {
|
||||
capturedRequest = request;
|
||||
return http.Response('{"icon":"data:image/png;base64,icon-bytes"}', 200);
|
||||
});
|
||||
final container = ProviderContainer(
|
||||
overrides: [communityIconHttpClientProvider.overrideWithValue(client)],
|
||||
);
|
||||
addTearDown(container.dispose);
|
||||
|
||||
final icon = await container.read(
|
||||
communityIconProvider('wss://relay.example.com').future,
|
||||
);
|
||||
|
||||
expect(capturedRequest.url, Uri.parse('https://relay.example.com'));
|
||||
expect(capturedRequest.headers['Accept'], 'application/nostr+json');
|
||||
expect(icon, 'data:image/png;base64,icon-bytes');
|
||||
});
|
||||
|
||||
test('returns null when the relay has no usable icon', () async {
|
||||
final client = http_testing.MockClient(
|
||||
(_) async => http.Response('{"icon":""}', 200),
|
||||
);
|
||||
final container = ProviderContainer(
|
||||
overrides: [communityIconHttpClientProvider.overrideWithValue(client)],
|
||||
);
|
||||
addTearDown(container.dispose);
|
||||
|
||||
final icon = await container.read(
|
||||
communityIconProvider('https://relay.example.com').future,
|
||||
);
|
||||
|
||||
expect(icon, isNull);
|
||||
});
|
||||
|
||||
test('returns null when relay information cannot be loaded', () async {
|
||||
final client = http_testing.MockClient(
|
||||
(_) async => http.Response('unavailable', 503),
|
||||
);
|
||||
final container = ProviderContainer(
|
||||
overrides: [communityIconHttpClientProvider.overrideWithValue(client)],
|
||||
);
|
||||
addTearDown(container.dispose);
|
||||
|
||||
final icon = await container.read(
|
||||
communityIconProvider('https://relay.example.com').future,
|
||||
);
|
||||
|
||||
expect(icon, isNull);
|
||||
});
|
||||
|
||||
test('refreshes a transient failure when explicitly invalidated', () async {
|
||||
var requestCount = 0;
|
||||
final client = http_testing.MockClient((_) async {
|
||||
requestCount++;
|
||||
if (requestCount == 1) {
|
||||
return http.Response('unavailable', 503);
|
||||
}
|
||||
return http.Response(
|
||||
'{"icon":"https://relay.example.com/icon.png"}',
|
||||
200,
|
||||
);
|
||||
});
|
||||
final container = ProviderContainer(
|
||||
overrides: [communityIconHttpClientProvider.overrideWithValue(client)],
|
||||
);
|
||||
final provider = communityIconProvider('https://relay.example.com');
|
||||
final subscription = container.listen(provider, (_, _) {});
|
||||
addTearDown(() {
|
||||
subscription.close();
|
||||
container.dispose();
|
||||
});
|
||||
|
||||
expect(await container.read(provider.future), isNull);
|
||||
expect(requestCount, 1);
|
||||
|
||||
container.invalidate(provider);
|
||||
|
||||
expect(
|
||||
await container.read(provider.future),
|
||||
'https://relay.example.com/icon.png',
|
||||
);
|
||||
expect(requestCount, 2);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user