forked from EVOgeek/Vmeda.Online
		
	MOBILE-3833 test: Implement pending tests
This commit is contained in:
		
							parent
							
								
									b039ad6275
								
							
						
					
					
						commit
						9a5772c72b
					
				| @ -32,6 +32,8 @@ import { DomSanitizer } from '@singletons'; | ||||
| }) | ||||
| export class CoreIframeComponent implements OnChanges { | ||||
| 
 | ||||
|     static loadingTimeout = 15000; | ||||
| 
 | ||||
|     @ViewChild('iframe') iframe?: ElementRef; | ||||
|     @Input() src?: string; | ||||
|     @Input() iframeWidth?: string; | ||||
| @ -43,7 +45,6 @@ export class CoreIframeComponent implements OnChanges { | ||||
|     safeUrl?: SafeResourceUrl; | ||||
|     displayHelp = false; | ||||
| 
 | ||||
|     protected readonly IFRAME_TIMEOUT = 15000; | ||||
|     protected logger: CoreLogger; | ||||
|     protected initialized = false; | ||||
| 
 | ||||
| @ -89,7 +90,7 @@ export class CoreIframeComponent implements OnChanges { | ||||
|         if (this.loading) { | ||||
|             setTimeout(() => { | ||||
|                 this.loading = false; | ||||
|             }, this.IFRAME_TIMEOUT); | ||||
|             }, CoreIframeComponent.loadingTimeout); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -12,8 +12,28 @@ | ||||
| // See the License for the specific language governing permissions and
 | ||||
| // limitations under the License.
 | ||||
| 
 | ||||
| import { CoreIframeComponent } from '@components/iframe/iframe'; | ||||
| 
 | ||||
| import { renderTemplate } from '@/testing/utils'; | ||||
| 
 | ||||
| describe('CoreIframeComponent', () => { | ||||
| 
 | ||||
|     it.todo('should render'); | ||||
|     it('should render', async () => { | ||||
|         // Arrange.
 | ||||
|         CoreIframeComponent.loadingTimeout = 0; | ||||
| 
 | ||||
|         // Act.
 | ||||
|         const { nativeElement } = await renderTemplate( | ||||
|             CoreIframeComponent, | ||||
|             '<core-iframe src="https://moodle.org/"></core-iframe>', | ||||
|         ); | ||||
| 
 | ||||
|         // Assert.
 | ||||
|         expect(nativeElement.innerHTML.trim()).not.toHaveLength(0); | ||||
| 
 | ||||
|         const iframe = nativeElement.querySelector('iframe'); | ||||
|         expect(iframe).not.toBeNull(); | ||||
|         expect(iframe.src).toEqual('https://moodle.org/'); | ||||
|     }); | ||||
| 
 | ||||
| }); | ||||
|  | ||||
| @ -12,8 +12,22 @@ | ||||
| // See the License for the specific language governing permissions and
 | ||||
| // limitations under the License.
 | ||||
| 
 | ||||
| import { CoreUserAvatarComponent } from '@components/user-avatar/user-avatar'; | ||||
| 
 | ||||
| import { renderComponent } from '@/testing/utils'; | ||||
| 
 | ||||
| describe('CoreUserAvatarComponent', () => { | ||||
| 
 | ||||
|     it.todo('should render'); | ||||
|     it('should render', async () => { | ||||
|         // Act.
 | ||||
|         const { nativeElement } = await renderComponent(CoreUserAvatarComponent); | ||||
| 
 | ||||
|         // Assert.
 | ||||
|         expect(nativeElement.innerHTML.trim()).not.toHaveLength(0); | ||||
| 
 | ||||
|         const image = nativeElement.querySelector('img'); | ||||
|         expect(image).not.toBeNull(); | ||||
|         expect(image.src).toEqual(document.location.href + 'assets/img/user-avatar.png'); | ||||
|     }); | ||||
| 
 | ||||
| }); | ||||
|  | ||||
| @ -13,34 +13,29 @@ | ||||
| // limitations under the License.
 | ||||
| 
 | ||||
| import { IonContent } from '@ionic/angular'; | ||||
| import { NgZone } from '@angular/core'; | ||||
| import Faker from 'faker'; | ||||
| 
 | ||||
| import { CoreConfig } from '@services/config'; | ||||
| import { CoreDomUtils, CoreDomUtilsProvider } from '@services/utils/dom'; | ||||
| import { CoreContentLinksHelper } from '@features/contentlinks/services/contentlinks-helper'; | ||||
| import { CoreFilepool } from '@services/filepool'; | ||||
| import { CoreFilter } from '@features/filter/services/filter'; | ||||
| import { CoreFilterHelper } from '@features/filter/services/filter-helper'; | ||||
| import { CoreFormatTextDirective } from '@directives/format-text'; | ||||
| import { CoreSite } from '@classes/site'; | ||||
| import { CoreSites } from '@services/sites'; | ||||
| import { CoreUrlUtils, CoreUrlUtilsProvider } from '@services/utils/url'; | ||||
| import { CoreUtils, CoreUtilsProvider } from '@services/utils/utils'; | ||||
| import { Platform } from '@singletons'; | ||||
| import { CoreUtils } from '@services/utils/utils'; | ||||
| 
 | ||||
| import { mock, mockSingleton, RenderConfig, renderWrapperComponent } from '@/testing/utils'; | ||||
| import { CoreFilter } from '@features/filter/services/filter'; | ||||
| import { CoreApp } from '@services/app'; | ||||
| import { mock, mockSingleton, RenderConfig, renderTemplate, renderWrapperComponent } from '@/testing/utils'; | ||||
| 
 | ||||
| describe('CoreFormatTextDirective', () => { | ||||
| 
 | ||||
|     let config: Partial<RenderConfig>; | ||||
| 
 | ||||
|     beforeEach(() => { | ||||
|         mockSingleton(Platform, { ready: () => Promise.resolve() }); | ||||
|         mockSingleton(CoreSites, { getSite: () => Promise.reject() }); | ||||
|         mockSingleton(CoreConfig, { get: (_, defaultValue) => defaultValue }); | ||||
| 
 | ||||
|         CoreDomUtils.setInstance(new CoreDomUtilsProvider()); | ||||
|         CoreUrlUtils.setInstance(new CoreUrlUtilsProvider()); | ||||
|         CoreUtils.setInstance(new CoreUtilsProvider(mock<NgZone>())); | ||||
|         mockSingleton(CoreFilter, { formatText: text => Promise.resolve(text) }); | ||||
|         mockSingleton(CoreFilterHelper, { getFiltersAndFormatText: text => Promise.resolve({ text, filters: [] }) }); | ||||
| 
 | ||||
|         config = { | ||||
|             providers: [ | ||||
| @ -53,9 +48,6 @@ describe('CoreFormatTextDirective', () => { | ||||
|         // Arrange
 | ||||
|         const sentence = Faker.lorem.sentence(); | ||||
| 
 | ||||
|         mockSingleton(CoreSites, { getSite: () => Promise.reject() }); | ||||
|         mockSingleton(CoreFilter, { formatText: (text) => Promise.resolve(text) }); | ||||
| 
 | ||||
|         // Act
 | ||||
|         const fixture = await renderWrapperComponent( | ||||
|             CoreFormatTextDirective, | ||||
| @ -70,6 +62,63 @@ describe('CoreFormatTextDirective', () => { | ||||
|         expect(text.innerHTML).toEqual(sentence); | ||||
|     }); | ||||
| 
 | ||||
|     it('should format text', async () => { | ||||
|         // Arrange
 | ||||
|         mockSingleton(CoreFilter, { formatText: () => 'Formatted text' }); | ||||
| 
 | ||||
|         // Act
 | ||||
|         const { nativeElement } = await renderTemplate( | ||||
|             CoreFormatTextDirective, | ||||
|             '<core-format-text text="Lorem ipsum dolor"></core-format-text>', | ||||
|         ); | ||||
| 
 | ||||
|         // Assert
 | ||||
|         const text = nativeElement.querySelector('core-format-text'); | ||||
|         expect(text).not.toBeNull(); | ||||
|         expect(text.textContent).toEqual('Formatted text'); | ||||
| 
 | ||||
|         expect(CoreFilter.formatText).toHaveBeenCalledTimes(1); | ||||
|         expect(CoreFilter.formatText).toHaveBeenCalledWith( | ||||
|             'Lorem ipsum dolor', | ||||
|             expect.anything(), | ||||
|             expect.anything(), | ||||
|             undefined, | ||||
|         ); | ||||
|     }); | ||||
| 
 | ||||
|     it('should get filters from server and format text', async () => { | ||||
|         // Arrange
 | ||||
|         mockSingleton(CoreFilterHelper, { | ||||
|             getFiltersAndFormatText: () => Promise.resolve({ | ||||
|                 text: 'Formatted text', | ||||
|                 filters: [], | ||||
|             }), | ||||
|         }); | ||||
| 
 | ||||
|         // Act
 | ||||
|         const { nativeElement } = await renderTemplate(CoreFormatTextDirective, ` | ||||
|             <core-format-text | ||||
|                 text="Lorem ipsum dolor" | ||||
|                 contextLevel="course" | ||||
|                 [contextInstanceId]="42" | ||||
|             ></core-format-text> | ||||
|         `);
 | ||||
| 
 | ||||
|         // Assert
 | ||||
|         const text = nativeElement.querySelector('core-format-text'); | ||||
|         expect(text).not.toBeNull(); | ||||
|         expect(text.textContent).toEqual('Formatted text'); | ||||
| 
 | ||||
|         expect(CoreFilterHelper.getFiltersAndFormatText).toHaveBeenCalledTimes(1); | ||||
|         expect(CoreFilterHelper.getFiltersAndFormatText).toHaveBeenCalledWith( | ||||
|             'Lorem ipsum dolor', | ||||
|             'course', | ||||
|             42, | ||||
|             expect.anything(), | ||||
|             undefined, | ||||
|         ); | ||||
|     }); | ||||
| 
 | ||||
|     it('should use external-content directive on images', async () => { | ||||
|         // Arrange
 | ||||
|         const site = mock<CoreSite>({ | ||||
| @ -86,11 +135,9 @@ describe('CoreFormatTextDirective', () => { | ||||
|             getSite: () => Promise.resolve(site), | ||||
|             getCurrentSite: () => Promise.resolve(site), | ||||
|         }); | ||||
|         mockSingleton(CoreFilter, { formatText: (text) => Promise.resolve(text) }); | ||||
|         mockSingleton(CoreApp, { isMobile: () => false }); | ||||
| 
 | ||||
|         // Act
 | ||||
|         const fixture = await renderWrapperComponent( | ||||
|         const { nativeElement } = await renderWrapperComponent( | ||||
|             CoreFormatTextDirective, | ||||
|             'core-format-text', | ||||
|             { text: '<img src="https://image-url">', siteId: site.getId() }, | ||||
| @ -98,7 +145,7 @@ describe('CoreFormatTextDirective', () => { | ||||
|         ); | ||||
| 
 | ||||
|         // Assert
 | ||||
|         const image = fixture.nativeElement.querySelector('img'); | ||||
|         const image = nativeElement.querySelector('img'); | ||||
|         expect(image).not.toBeNull(); | ||||
|         expect(image.src).toEqual('file://local-path/'); | ||||
| 
 | ||||
| @ -106,10 +153,28 @@ describe('CoreFormatTextDirective', () => { | ||||
|         expect(CoreFilepool.getSrcByUrl).toHaveBeenCalledTimes(1); | ||||
|     }); | ||||
| 
 | ||||
|     it.todo('should format text'); | ||||
|     it('should use link directive on anchors', async () => { | ||||
|         // Arrange
 | ||||
|         mockSingleton(CoreContentLinksHelper, { handleLink: () => Promise.resolve(true) }); | ||||
| 
 | ||||
|     it.todo('should get filters from server and format text'); | ||||
|         // Act
 | ||||
|         const { nativeElement } = await renderWrapperComponent( | ||||
|             CoreFormatTextDirective, | ||||
|             'core-format-text', | ||||
|             { text: '<a href="https://anchor-url/">Link</a>' }, | ||||
|         ); | ||||
|         const anchor = nativeElement.querySelector('a'); | ||||
| 
 | ||||
|     it.todo('should use link directive on anchors'); | ||||
|         anchor.click(); | ||||
| 
 | ||||
|         // Assert
 | ||||
|         expect(CoreContentLinksHelper.handleLink).toHaveBeenCalledTimes(1); | ||||
|         expect(CoreContentLinksHelper.handleLink).toHaveBeenCalledWith( | ||||
|             'https://anchor-url/', | ||||
|             undefined, | ||||
|             expect.anything(), | ||||
|             expect.anything(), | ||||
|         ); | ||||
|     }); | ||||
| 
 | ||||
| }); | ||||
|  | ||||
| @ -13,8 +13,9 @@ | ||||
| // limitations under the License.
 | ||||
| 
 | ||||
| import { CoreLinkDirective } from '@directives/link'; | ||||
| import { CoreContentLinksHelper } from '@features/contentlinks/services/contentlinks-helper'; | ||||
| 
 | ||||
| import { renderTemplate } from '@/testing/utils'; | ||||
| import { mockSingleton, renderTemplate } from '@/testing/utils'; | ||||
| 
 | ||||
| describe('CoreLinkDirective', () => { | ||||
| 
 | ||||
| @ -33,6 +34,28 @@ describe('CoreLinkDirective', () => { | ||||
|         expect(anchor.href).toEqual('https://moodle.org/'); | ||||
|     }); | ||||
| 
 | ||||
|     it.todo('should capture clicks'); | ||||
|     it('should capture clicks', async () => { | ||||
|         // Arrange
 | ||||
|         mockSingleton(CoreContentLinksHelper, { handleLink: () => Promise.resolve(true) }); | ||||
| 
 | ||||
|         // Act
 | ||||
|         const { nativeElement } = await renderTemplate( | ||||
|             CoreLinkDirective, | ||||
|             '<a href="https://moodle.org/" core-link [capture]="true">Link</a>', | ||||
|         ); | ||||
| 
 | ||||
|         const anchor = nativeElement.querySelector('a'); | ||||
| 
 | ||||
|         anchor.click(); | ||||
| 
 | ||||
|         // Assert
 | ||||
|         expect(CoreContentLinksHelper.handleLink).toHaveBeenCalledTimes(1); | ||||
|         expect(CoreContentLinksHelper.handleLink).toHaveBeenCalledWith( | ||||
|             'https://moodle.org/', | ||||
|             undefined, | ||||
|             expect.anything(), | ||||
|             expect.anything(), | ||||
|         ); | ||||
|     }); | ||||
| 
 | ||||
| }); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user