@@ -5,6 +5,7 @@ import { FILES_KEY, SUBS_KEY } from '@/constants';
55
66let $ ;
77let registerFileRoutes ;
8+ let registerPreviewRoutes ;
89let originalError ;
910let originalInfo ;
1011let originalNotify ;
@@ -101,10 +102,33 @@ async function requestFile(name, query = {}) {
101102 return res ;
102103}
103104
105+ async function previewFile ( file ) {
106+ const app = createRouteApp ( ) ;
107+ registerPreviewRoutes ( app ) ;
108+ const handler = app . handlers . get ( 'POST /api/preview/file' ) ;
109+ const res = createResponse ( '/api/preview/file' ) ;
110+
111+ await handler (
112+ {
113+ body : file ,
114+ headers : { } ,
115+ method : 'POST' ,
116+ path : '/api/preview/file' ,
117+ query : { } ,
118+ socket : { } ,
119+ url : '/api/preview/file' ,
120+ } ,
121+ res ,
122+ ) ;
123+
124+ return res ;
125+ }
126+
104127describe ( 'mihomo profile file routes' , function ( ) {
105128 before ( async function ( ) {
106129 ( { default : $ } = require ( '@/core/app' ) ) ;
107130 ( { default : registerFileRoutes } = require ( '@/restful/file' ) ) ;
131+ ( { default : registerPreviewRoutes } = require ( '@/restful/preview' ) ) ;
108132
109133 originalRead = $ . read . bind ( $ ) ;
110134 originalWrite = $ . write . bind ( $ ) ;
@@ -152,6 +176,44 @@ describe('mihomo profile file routes', function () {
152176 $ . notify = ( ) => { } ;
153177 } ) ;
154178
179+ it ( 'builds mihomoProfile proxies before file processors run' , async function ( ) {
180+ state [ FILES_KEY ] = [
181+ {
182+ name : 'base-file' ,
183+ type : 'mihomoProfile' ,
184+ sourceType : 'subscription' ,
185+ sourceName : 'demo-sub' ,
186+ includeUnsupportedProxy : false ,
187+ process : [ ] ,
188+ } ,
189+ ] ;
190+
191+ const res = await requestFile ( 'base-file' ) ;
192+
193+ expect ( res . statusCode ) . to . equal ( 200 ) ;
194+ expect ( res . sent ) . to . include ( 'proxies:' ) ;
195+ expect ( res . sent ) . to . include ( 'name: Supported' ) ;
196+ expect ( res . sent ) . to . not . include ( 'name: Unsupported' ) ;
197+ } ) ;
198+
199+ it ( 'previews mihomoProfile proxies before file processors run' , async function ( ) {
200+ const res = await previewFile ( {
201+ name : 'preview-file' ,
202+ type : 'mihomoProfile' ,
203+ sourceType : 'subscription' ,
204+ sourceName : 'demo-sub' ,
205+ includeUnsupportedProxy : false ,
206+ process : [ ] ,
207+ } ) ;
208+
209+ expect ( res . statusCode ) . to . equal ( 200 ) ;
210+ expect ( res . sent . status ) . to . equal ( 'success' ) ;
211+ expect ( res . sent . data . original ) . to . include ( 'proxies:' ) ;
212+ expect ( res . sent . data . original ) . to . include ( 'name: Supported' ) ;
213+ expect ( res . sent . data . original ) . to . not . include ( 'name: Unsupported' ) ;
214+ expect ( res . sent . data . processed ) . to . include ( 'name: Supported' ) ;
215+ } ) ;
216+
155217 it ( 'keeps unsupported proxies for YAML mihomoProfile overrides when enabled' , async function ( ) {
156218 state [ FILES_KEY ] = [
157219 {
0 commit comments