diff --git a/dio_cache_interceptor/lib/src/extension/response_extension.dart b/dio_cache_interceptor/lib/src/extension/response_extension.dart index d372919..602fbab 100644 --- a/dio_cache_interceptor/lib/src/extension/response_extension.dart +++ b/dio_cache_interceptor/lib/src/extension/response_extension.dart @@ -49,6 +49,7 @@ extension ResponseExtension on Response { } updateNonNullHeader(cacheControlHeader); + updateNonNullHeader(ageHeader); updateNonNullHeader(dateHeader); updateNonNullHeader(etagHeader); updateNonNullHeader(lastModifiedHeader); diff --git a/dio_cache_interceptor/test/cache_interceptor_test.dart b/dio_cache_interceptor/test/cache_interceptor_test.dart index b4e378f..128f5f7 100644 --- a/dio_cache_interceptor/test/cache_interceptor_test.dart +++ b/dio_cache_interceptor/test/cache_interceptor_test.dart @@ -96,12 +96,14 @@ void main() { final resp = await dio.get('${MockHttpClientAdapter.mockBase}/ok'); final key = resp.extra[extraCacheKey]; expect(await store.exists(key), isTrue); + expect(resp.headers[ageHeader], equals(['1'])); var resp304 = await dio.get('${MockHttpClientAdapter.mockBase}/ok'); expect(resp304.statusCode, equals(200)); expect(resp.data['path'], equals('/ok')); expect(resp304.extra[extraCacheKey], equals(key)); expect(resp304.extra[extraFromNetworkKey], isTrue); + expect(resp304.headers[ageHeader], equals(['10'])); expect(resp304.headers['etag'], equals(['5678'])); }); diff --git a/dio_cache_interceptor/test/mock_httpclient_adapter.dart b/dio_cache_interceptor/test/mock_httpclient_adapter.dart index 617d2ca..397616d 100644 --- a/dio_cache_interceptor/test/mock_httpclient_adapter.dart +++ b/dio_cache_interceptor/test/mock_httpclient_adapter.dart @@ -26,6 +26,7 @@ class MockHttpClientAdapter implements HttpClientAdapter { 304, headers: { Headers.contentTypeHeader: [Headers.jsonContentType], + ageHeader: ['10'], 'etag': ['5678'], }, ); @@ -44,11 +45,12 @@ class MockHttpClientAdapter implements HttpClientAdapter { return ResponseBody.fromString( jsonEncode({'path': uri.path}), 200, - headers: { - Headers.contentTypeHeader: [Headers.jsonContentType], - 'etag': ['1234'], - }, - ); + headers: { + Headers.contentTypeHeader: [Headers.jsonContentType], + ageHeader: ['1'], + 'etag': ['1234'], + }, + ); case '/ok-nodirective': return ResponseBody.fromString( jsonEncode({'path': uri.path}), diff --git a/http_cache_client/lib/src/extension/response_extension.dart b/http_cache_client/lib/src/extension/response_extension.dart index bbda281..cd7af2f 100644 --- a/http_cache_client/lib/src/extension/response_extension.dart +++ b/http_cache_client/lib/src/extension/response_extension.dart @@ -46,6 +46,7 @@ extension ResponseExtension on http.Response { } updateNonNullHeader(cacheControlHeader); + updateNonNullHeader(ageHeader); updateNonNullHeader(dateHeader); updateNonNullHeader(etagHeader); updateNonNullHeader(lastModifiedHeader); diff --git a/http_cache_client/test/http_cache_client_cache_call_mocks.dart b/http_cache_client/test/http_cache_client_cache_call_mocks.dart index 694bd7a..70cc5a1 100644 --- a/http_cache_client/test/http_cache_client_cache_call_mocks.dart +++ b/http_cache_client/test/http_cache_client_cache_call_mocks.dart @@ -15,10 +15,15 @@ Future getOk( MockClient( (request) async => http.Response( jsonEncode({'path': request.url.path}), - request.headers.containsKey('x-err') ? 500 : 200, + request.headers.containsKey('x-err') + ? 500 + : request.headers.containsKey(ifNoneMatchHeader) + ? 304 + : 200, headers: { contentTypeHeader: jsonContentType, - etagHeader: '1234', + etagHeader: request.headers.containsKey(ifNoneMatchHeader) ? '5678' : '1234', + ageHeader: request.headers.containsKey(ifNoneMatchHeader) ? '10' : '1', dateHeader: HttpDate.format(DateTime.now()), }, request: request, diff --git a/http_cache_client/test/http_cache_client_cache_test.dart b/http_cache_client/test/http_cache_client_cache_test.dart index 8c38ef2..1942fb0 100644 --- a/http_cache_client/test/http_cache_client_cache_test.dart +++ b/http_cache_client/test/http_cache_client_cache_test.dart @@ -50,16 +50,16 @@ void main() { final key = options.keyBuilder(url: resp.request!.url); expect(await store.exists(key), isTrue); final cacheResp1 = await store.get(key); + expect(resp.headers[ageHeader], equals('1')); final resp304 = await getOk(options); expect(resp304.statusCode, equals(200)); final cacheResp2 = await store.get(key); - - expect( - cacheResp1!.copyWith( - requestDate: cacheResp2!.requestDate, - responseDate: cacheResp2.responseDate), - equals(cacheResp2)); + expect(resp304.headers[ageHeader], equals('10')); + expect(cacheResp1, isNotNull); + expect(cacheResp2, isNotNull); + expect(cacheResp2!.eTag, equals('5678')); + expect(cacheResp2.getHeaders()[ageHeader], equals('10')); }); test('Fetch noCache policy', () async {