Skip to content

Commit

Permalink
Refactor MW url builder methods invocation, refactor forceRender test
Browse files Browse the repository at this point in the history
  • Loading branch information
VadimKovalenkoSNF committed Nov 13, 2023
1 parent d8bf7fc commit db23e5c
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 56 deletions.
10 changes: 4 additions & 6 deletions src/Downloader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,6 @@ export const defaultStreamRequestOptions: AxiosRequestConfig = {
class Downloader {
public loginCookie = ''
public readonly speed: number
public baseUrl: string
public baseUrlForMainPage: string
public cssDependenceUrls: KVS<boolean> = {}
public readonly webp: boolean = false
public readonly requestTimeout: number
Expand Down Expand Up @@ -179,15 +177,15 @@ class Downloader {
private getUrlDirector(renderer: object) {
switch (renderer.constructor.name) {
case 'WikimediaDesktopRenderer':
return new WikimediaDesktopURLDirector(MediaWiki.WikimediaDesktopApiUrl.href)
return new WikimediaDesktopURLDirector(MediaWiki.wikimediaDesktopApiUrl.href)
case 'VisualEditorRenderer':
return new VisualEditorURLDirector(MediaWiki.VisualEditorApiUrl.href)
return new VisualEditorURLDirector(MediaWiki.visualEditorApiUrl.href)
case 'WikimediaMobileRenderer':
return new WikimediaMobileURLDirector(MediaWiki.WikimediaMobileApiUrl.href)
return new WikimediaMobileURLDirector(MediaWiki.wikimediaMobileApiUrl.href)
}
}

public async setUrlsDirectors(mainPageRenderer, articlesRenderer): Promise<void> {
public setUrlsDirectors(mainPageRenderer, articlesRenderer): void {
if (!this.articleUrlDirector) {
this.articleUrlDirector = this.getUrlDirector(articlesRenderer)
}
Expand Down
92 changes: 45 additions & 47 deletions src/MediaWiki.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class MediaWiki {
public namespacesToMirror: string[] = []
public apiCheckArticleId: string
public queryOpts: QueryOpts
public urlDirector: BaseURLDirector

#wikiPath: string
#actionApiPath: string
Expand All @@ -50,22 +51,19 @@ class MediaWiki {
#username: string
#password: string
#domain: string
private apiUrlDirector: ApiURLDirector
private baseUrlDirector: BaseURLDirector

public wikimediaDesktopUrlDirector: WikimediaDesktopURLDirector
public wikimediaMobileUrlDirector: WikimediaMobileURLDirector
public visualEditorURLDirector: VisualEditorURLDirector

public visualEditorApiUrl: URL
public actionApiUrl: URL
public webUrl: URL
public wikimediaDesktopApiUrl: URL
public wikimediaMobileApiUrl: URL

public VisualEditorApiUrl: URL
public apiUrl: URL
public modulePath: string // only for reading
public mobileModulePath: string
public webUrl: URL
public WikimediaDesktopApiUrl: URL
public WikimediaMobileApiUrl: URL

#apiUrlDirector: ApiURLDirector
#wikimediaDesktopUrlDirector: WikimediaDesktopURLDirector
Expand All @@ -87,14 +85,16 @@ class MediaWiki {
set actionApiPath(value: string) {
if (value) {
this.#actionApiPath = value
this.initApiURLDirector()
this.actionApiUrl = this.urlDirector.buildURL(this.#actionApiPath)
this.setVisualEditorURL()
}
}

set restApiPath(value: string) {
if (value) {
this.#restApiPath = value
this.initApiURLDirector()
this.setWikimediaDesktopApiUrl()
this.setWikimediaMobileApiUrl()
}
}

Expand All @@ -105,31 +105,33 @@ class MediaWiki {
set wikiPath(value: string) {
if (value) {
this.#wikiPath = value
this.initApiURLDirector()
this.webUrl = this.urlDirector.buildURL(this.#wikiPath)
}
}

set base(value: string) {
if (value) {
this.baseUrl = basicURLDirector.buildMediawikiBaseURL(value)
this.baseUrlDirector = new BaseURLDirector(this.baseUrl.href)
this.initMWApis()
this.initApiURLDirector()
this.urlDirector = new BaseURLDirector(this.baseUrl.href)
this.webUrl = this.urlDirector.buildURL(this.#wikiPath)
this.actionApiUrl = this.urlDirector.buildURL(this.#actionApiPath)
this.setWikimediaDesktopApiUrl()
this.setWikimediaMobileApiUrl()
this.setVisualEditorURL()
this.setModuleURL()
this.setMobileModuleUrl()
}
}

set modulePathOpt(value: string) {
if (value) {
if (value !== undefined) {
this.#modulePathOpt = value
if (this.baseUrlDirector) {
this.modulePath = this.baseUrlDirector.buildModuleURL(this.#modulePathOpt)
} else {
logger.error('Base url director should be specified first')
}
} else {
if (this.baseUrlDirector) {
this.modulePath = this.baseUrlDirector.buildModuleURL(this.#modulePathOpt)
}
}

if (this.urlDirector) {
this.setModuleURL()
} else if (value) {
logger.error('Base url director should be specified first')

Check warning on line 134 in src/MediaWiki.ts

View check run for this annotation

Codecov / codecov/patch

src/MediaWiki.ts#L134

Added line #L134 was not covered by tests
}
}

Expand Down Expand Up @@ -170,7 +172,7 @@ class MediaWiki {

public async hasWikimediaDesktopApi(): Promise<boolean> {
if (this.#hasWikimediaDesktopApi === null) {
this.#wikimediaDesktopUrlDirector = new WikimediaDesktopURLDirector(this.WikimediaDesktopApiUrl.href)
this.#wikimediaDesktopUrlDirector = new WikimediaDesktopURLDirector(this.wikimediaDesktopApiUrl.href)
this.#hasWikimediaDesktopApi = await checkApiAvailability(this.#wikimediaDesktopUrlDirector.buildArticleURL(this.apiCheckArticleId))
return this.#hasWikimediaDesktopApi
}
Expand All @@ -179,7 +181,7 @@ class MediaWiki {

public async hasWikimediaMobileApi(): Promise<boolean> {
if (this.#hasWikimediaMobileApi === null) {
this.#wikimediaMobileUrlDirector = new WikimediaMobileURLDirector(this.WikimediaMobileApiUrl.href)
this.#wikimediaMobileUrlDirector = new WikimediaMobileURLDirector(this.wikimediaMobileApiUrl.href)
this.#hasWikimediaMobileApi = await checkApiAvailability(this.#wikimediaMobileUrlDirector.buildArticleURL(this.apiCheckArticleId))
return this.#hasWikimediaMobileApi
}
Expand All @@ -188,7 +190,7 @@ class MediaWiki {

public async hasVisualEditorApi(): Promise<boolean> {
if (this.#hasVisualEditorApi === null) {
this.#visualEditorURLDirector = new VisualEditorURLDirector(this.VisualEditorApiUrl.href)
this.#visualEditorURLDirector = new VisualEditorURLDirector(this.visualEditorApiUrl.href)
this.#hasVisualEditorApi = await checkApiAvailability(this.#visualEditorURLDirector.buildArticleURL(this.apiCheckArticleId))
return this.#hasVisualEditorApi
}
Expand All @@ -214,29 +216,25 @@ class MediaWiki {
return this.#hasCoordinates
}

private initMWApis() {
this.WikimediaDesktopApiUrl = this.baseUrlDirector.buildWikimediaDesktopApiUrl(this.#restApiPath)
this.WikimediaMobileApiUrl = this.baseUrlDirector.buildWikimediaMobileApiUrl(this.#restApiPath)
this.mobileModulePath = this.baseUrlDirector.buildMobileModuleURL()
this.wikimediaDesktopUrlDirector = new WikimediaDesktopURLDirector(this.WikimediaDesktopApiUrl.href)
this.wikimediaMobileUrlDirector = new WikimediaMobileURLDirector(this.WikimediaMobileApiUrl.href)
private setWikimediaDesktopApiUrl() {
this.wikimediaDesktopApiUrl = this.urlDirector.buildWikimediaDesktopApiUrl(this.#restApiPath)
}

private setWikimediaMobileApiUrl() {
this.wikimediaMobileApiUrl = this.urlDirector.buildWikimediaMobileApiUrl(this.#restApiPath)
}

private setVisualEditorURL() {
this.#apiUrlDirector = new ApiURLDirector(this.actionApiUrl.href)
this.visualEditorApiUrl = this.#apiUrlDirector.buildVisualEditorURL()
}

private setModuleURL() {
this.modulePath = this.urlDirector.buildModuleURL(this.#modulePathOpt)
}

private initApiURLDirector() {
this.webUrl = this.baseUrlDirector.buildURL(this.#wikiPath)
this.actionApiUrl = this.baseUrlDirector.buildURL(this.#actionApiPath)
this.apiUrlDirector = new ApiURLDirector(this.actionApiUrl.href)
this.visualEditorApiUrl = this.apiUrlDirector.buildVisualEditorURL()
this.visualEditorURLDirector = new VisualEditorURLDirector(this.visualEditorApiUrl.href)
const baseUrlDirector = new BaseURLDirector(this.baseUrl.href)
this.webUrl = baseUrlDirector.buildURL(this.#wikiPath)
this.apiUrl = baseUrlDirector.buildURL(this.#apiActionPath)
this.#apiUrlDirector = new ApiURLDirector(this.apiUrl.href)
this.VisualEditorApiUrl = this.#apiUrlDirector.buildVisualEditorURL()
this.WikimediaDesktopApiUrl = baseUrlDirector.buildWikimediaDesktopApiUrl(this.#restApiPath)
this.WikimediaMobileApiUrl = baseUrlDirector.buildWikimediaMobileApiUrl(this.#restApiPath)
this.modulePath = baseUrlDirector.buildModuleURL(this._modulePathOpt)
this.mobileModulePath = baseUrlDirector.buildMobileModuleURL()
private setMobileModuleUrl() {
this.mobileModulePath = this.urlDirector.buildMobileModuleURL()
}

public async login(downloader: Downloader) {
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/forceRender.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ describe('forceRender', () => {
try {
await mwoffliner.execute({ ...parameters, forceRender })
} catch (err) {
expect(err.message).toEqual('Unable to find specific API end-point to retrieve article HTML')
expect(err.message).toEqual('Unknown renderName for specific mode: unknownRenderName')
}
})
})
1 change: 1 addition & 0 deletions test/testRenders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ export async function testRenders(parameters: Parameters, callback, renderersLis
logger.error(err.message)
return
}
}
}

export async function testAllRenders(parameters: Parameters, callback) {
Expand Down
4 changes: 2 additions & 2 deletions test/unit/saveArticles.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ describe('saveArticles', () => {

test(`Load main page and check that it is without header using ${renderer} renderer`, async () => {
const { downloader, dump } = await setupScrapeClasses({ mwUrl: 'https://en.wikivoyage.org' }) // en wikipedia
await downloader.setBaseUrlsDirectors(rendererInstance, rendererInstance)
downloader.setUrlsDirectors(rendererInstance, rendererInstance)
const articleId = 'Main_Page'
const articleUrl = downloader.getArticleUrl(articleId)
const _articleDetailsRet = await downloader.getArticleDetailsIds([articleId])
Expand All @@ -148,7 +148,7 @@ describe('saveArticles', () => {

test(`--customFlavour using ${renderer} renderer`, async () => {
const { downloader, dump } = await setupScrapeClasses({ format: 'nopic' }) // en wikipedia
await downloader.setBaseUrlsDirectors(rendererInstance, rendererInstance)
downloader.setUrlsDirectors(rendererInstance, rendererInstance)
class CustomFlavour implements CustomProcessor {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
public async shouldKeepArticle(articleId: string, doc: Document) {
Expand Down

0 comments on commit db23e5c

Please sign in to comment.