forked from baron/baron-sso
locale_store 리팩토링
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
import 'web_storage_stub.dart'
|
||||
if (dart.library.html) 'web_storage_web.dart';
|
||||
|
||||
export 'web_storage_stub.dart'
|
||||
if (dart.library.html) 'web_storage_web.dart';
|
||||
@@ -1,21 +0,0 @@
|
||||
class WebStorage {
|
||||
bool get isWeb => false;
|
||||
|
||||
String? get(String key) => null;
|
||||
|
||||
void set(String key, String value) {}
|
||||
|
||||
String? getSession(String key) => null;
|
||||
|
||||
void setSession(String key, String value) {}
|
||||
|
||||
void removeSession(String key) {}
|
||||
|
||||
void clearSession() {}
|
||||
|
||||
void remove(String key) {}
|
||||
|
||||
void clear() {}
|
||||
}
|
||||
|
||||
final webStorage = WebStorage();
|
||||
@@ -1,37 +0,0 @@
|
||||
// ignore_for_file: avoid_web_libraries_in_flutter
|
||||
|
||||
import 'package:web/web.dart' as web;
|
||||
|
||||
class WebStorage {
|
||||
bool get isWeb => true;
|
||||
|
||||
String? get(String key) => web.window.localStorage.getItem(key);
|
||||
|
||||
void set(String key, String value) {
|
||||
web.window.localStorage.setItem(key, value);
|
||||
}
|
||||
|
||||
String? getSession(String key) => web.window.sessionStorage.getItem(key);
|
||||
|
||||
void setSession(String key, String value) {
|
||||
web.window.sessionStorage.setItem(key, value);
|
||||
}
|
||||
|
||||
void removeSession(String key) {
|
||||
web.window.sessionStorage.removeItem(key);
|
||||
}
|
||||
|
||||
void clearSession() {
|
||||
web.window.sessionStorage.clear();
|
||||
}
|
||||
|
||||
void remove(String key) {
|
||||
web.window.localStorage.removeItem(key);
|
||||
}
|
||||
|
||||
void clear() {
|
||||
web.window.localStorage.clear();
|
||||
}
|
||||
}
|
||||
|
||||
final webStorage = WebStorage();
|
||||
@@ -1,87 +1,75 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:userfront/core/i18n/locale_storage.dart';
|
||||
|
||||
import 'helpers/web_storage.dart';
|
||||
import 'package:userfront/core/i18n/locale_storage_backend.dart';
|
||||
|
||||
void main() {
|
||||
setUp(() {
|
||||
LocaleStorage.forceMemoryStorageForTests(false);
|
||||
LocaleStorage.forceSessionStorageForTests(false);
|
||||
if (webStorage.isWeb) {
|
||||
webStorage.clear();
|
||||
webStorage.clearSession();
|
||||
}
|
||||
LocaleStorage.setTestModeForTests(LocaleStorageTestMode.normal);
|
||||
LocaleStorage.clearForTests();
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
LocaleStorage.forceMemoryStorageForTests(false);
|
||||
LocaleStorage.forceSessionStorageForTests(false);
|
||||
if (webStorage.isWeb) {
|
||||
webStorage.clear();
|
||||
webStorage.clearSession();
|
||||
}
|
||||
LocaleStorage.setTestModeForTests(LocaleStorageTestMode.normal);
|
||||
LocaleStorage.clearForTests();
|
||||
});
|
||||
|
||||
test(
|
||||
'localStorage write/read (웹)',
|
||||
() {
|
||||
if (!webStorage.isWeb) {
|
||||
return;
|
||||
}
|
||||
test('localStorage write/read (웹)', () {
|
||||
if (!kIsWeb) {
|
||||
return;
|
||||
}
|
||||
|
||||
LocaleStorage.write('ko');
|
||||
expect(webStorage.get('locale'), 'ko');
|
||||
expect(LocaleStorage.read(), 'ko');
|
||||
},
|
||||
skip: !webStorage.isWeb,
|
||||
);
|
||||
LocaleStorage.write('ko');
|
||||
expect(LocaleStorage.read(), 'ko');
|
||||
|
||||
test(
|
||||
'legacy key에서 locale로 마이그레이션 (웹)',
|
||||
() {
|
||||
if (!webStorage.isWeb) {
|
||||
return;
|
||||
}
|
||||
final state = LocaleStorage.debugStateForTests();
|
||||
expect(state.localCurrent, 'ko');
|
||||
expect(state.sessionCurrent, isNull);
|
||||
expect(state.memoryCurrent, isNull);
|
||||
}, skip: !kIsWeb);
|
||||
|
||||
webStorage.set('baron_locale', 'en');
|
||||
expect(LocaleStorage.read(), 'en');
|
||||
expect(webStorage.get('locale'), 'en');
|
||||
expect(webStorage.get('baron_locale'), isNull);
|
||||
},
|
||||
skip: !webStorage.isWeb,
|
||||
);
|
||||
test('legacy key에서 locale로 마이그레이션 (웹)', () {
|
||||
if (!kIsWeb) {
|
||||
return;
|
||||
}
|
||||
|
||||
test(
|
||||
'localStorage 접근이 차단되면 메모리 fallback (웹)',
|
||||
() {
|
||||
if (!webStorage.isWeb) {
|
||||
return;
|
||||
}
|
||||
LocaleStorage.seedLegacyForTests('en');
|
||||
expect(LocaleStorage.read(), 'en');
|
||||
|
||||
LocaleStorage.forceMemoryStorageForTests(true);
|
||||
final state = LocaleStorage.debugStateForTests();
|
||||
expect(state.localCurrent, 'en');
|
||||
expect(state.localLegacy, isNull);
|
||||
}, skip: !kIsWeb);
|
||||
|
||||
LocaleStorage.write('en');
|
||||
expect(webStorage.get('locale'), isNull);
|
||||
expect(webStorage.getSession('locale'), isNull);
|
||||
expect(LocaleStorage.read(), 'en');
|
||||
},
|
||||
skip: !webStorage.isWeb,
|
||||
);
|
||||
test('localStorage 접근이 차단되면 메모리 fallback (웹)', () {
|
||||
if (!kIsWeb) {
|
||||
return;
|
||||
}
|
||||
|
||||
test(
|
||||
'localStorage 접근이 차단되면 sessionStorage로 fallback (웹)',
|
||||
() {
|
||||
if (!webStorage.isWeb) {
|
||||
return;
|
||||
}
|
||||
LocaleStorage.forceMemoryStorageForTests(true);
|
||||
|
||||
LocaleStorage.forceSessionStorageForTests(true);
|
||||
LocaleStorage.write('en');
|
||||
expect(LocaleStorage.read(), 'en');
|
||||
|
||||
LocaleStorage.write('ko');
|
||||
expect(webStorage.get('locale'), isNull);
|
||||
expect(webStorage.getSession('locale'), 'ko');
|
||||
expect(LocaleStorage.read(), 'ko');
|
||||
},
|
||||
skip: !webStorage.isWeb,
|
||||
);
|
||||
final state = LocaleStorage.debugStateForTests();
|
||||
expect(state.localCurrent, isNull);
|
||||
expect(state.sessionCurrent, isNull);
|
||||
expect(state.memoryCurrent, 'en');
|
||||
}, skip: !kIsWeb);
|
||||
|
||||
test('localStorage 접근이 차단되면 sessionStorage로 fallback (웹)', () {
|
||||
if (!kIsWeb) {
|
||||
return;
|
||||
}
|
||||
|
||||
LocaleStorage.forceSessionStorageForTests(true);
|
||||
|
||||
LocaleStorage.write('ko');
|
||||
expect(LocaleStorage.read(), 'ko');
|
||||
|
||||
final state = LocaleStorage.debugStateForTests();
|
||||
expect(state.localCurrent, isNull);
|
||||
expect(state.sessionCurrent, 'ko');
|
||||
expect(state.memoryCurrent, isNull);
|
||||
}, skip: !kIsWeb);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user