@@ -44,5 +44,94 @@ describe('cli : facade : dev', () => {
4444 ) ;
4545 } ) ;
4646 } ) ;
47+
48+ describe ( 'when testing livereload refresh sequencing bugfix' , ( ) => {
49+ let packageComponentsStub , refreshLiveReloadSpy , watchStub ;
50+
51+ beforeEach ( ( ) => {
52+ sinon . stub ( local , 'getComponentsByDir' ) . resolves ( [ 'component1' ] ) ;
53+ packageComponentsStub = sinon . stub ( local , 'package' ) . resolves ( ) ;
54+ logSpy . warn = sinon . spy ( ) ;
55+ logSpy . ok = sinon . spy ( ) ;
56+ logSpy . log = sinon . spy ( ) ;
57+
58+ // Create a spy for refreshLiveReload that we can track
59+ refreshLiveReloadSpy = sinon . spy ( ) ;
60+
61+ // Mock watch to simulate file changes
62+ watchStub = sinon . stub ( ) ;
63+ } ) ;
64+
65+ afterEach ( ( ) => {
66+ local . getComponentsByDir . restore ( ) ;
67+ local . package . restore ( ) ;
68+ if ( watchStub . restore ) watchStub . restore ( ) ;
69+ } ) ;
70+
71+ it ( 'should call refreshLiveReload AFTER packageComponents completes' , async ( ) => {
72+ let packageComponentsCompleted = false ;
73+ let refreshLiveReloadCalled = false ;
74+
75+ // Mock packageComponents to track when it completes
76+ packageComponentsStub . callsFake ( ( ) => {
77+ return new Promise ( ( resolve ) => {
78+ setTimeout ( ( ) => {
79+ packageComponentsCompleted = true ;
80+ resolve ( ) ;
81+ } , 10 ) ;
82+ } ) ;
83+ } ) ;
84+
85+ // Mock refreshLiveReload to track when it's called
86+ const mockRefreshLiveReload = ( ) => {
87+ refreshLiveReloadCalled = true ;
88+ // Verify packageComponents completed BEFORE refreshLiveReload was called
89+ expect ( packageComponentsCompleted ) . to . be . true ;
90+ } ;
91+
92+ // Test the sequencing by simulating the watch callback behavior
93+ const components = [ 'component1' ] ;
94+ const componentDir = 'component1' ;
95+
96+ // Simulate what happens in watchForChanges when a file changes
97+ const packageAndRefresh = async ( ) => {
98+ await packageComponentsStub ( [ componentDir ] ) ;
99+ mockRefreshLiveReload ( ) ;
100+ } ;
101+
102+ await packageAndRefresh ( ) ;
103+
104+ expect ( packageComponentsCompleted ) . to . be . true ;
105+ expect ( refreshLiveReloadCalled ) . to . be . true ;
106+ expect ( packageComponentsStub . calledWith ( [ componentDir ] ) ) . to . be . true ;
107+ } ) ;
108+
109+ it ( 'should handle both single component and all components refresh sequencing' , async ( ) => {
110+ const components = [ 'component1' , 'component2' ] ;
111+ let allComponentsPackaged = false ;
112+ let singleComponentPackaged = false ;
113+
114+ packageComponentsStub . callsFake ( ( comps ) => {
115+ return new Promise ( ( resolve ) => {
116+ setTimeout ( ( ) => {
117+ if ( comps . length > 1 ) {
118+ allComponentsPackaged = true ;
119+ } else {
120+ singleComponentPackaged = true ;
121+ }
122+ resolve ( ) ;
123+ } , 10 ) ;
124+ } ) ;
125+ } ) ;
126+
127+ // Test packaging all components (when !componentDir)
128+ await packageComponentsStub ( components ) ;
129+ expect ( allComponentsPackaged ) . to . be . true ;
130+
131+ // Test packaging single component (when componentDir exists)
132+ await packageComponentsStub ( [ 'component1' ] ) ;
133+ expect ( singleComponentPackaged ) . to . be . true ;
134+ } ) ;
135+ } ) ;
47136 } ) ;
48137} ) ;
0 commit comments