From 2c84af3787b8124c35af9509b9c333279fa50a24 Mon Sep 17 00:00:00 2001 From: Sergey Akkuratov Date: Thu, 30 May 2024 19:23:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/commonTestData.js | 2 +- src/pageTempaltes.js | 16 +++++++--------- src/weatherApp.js | 22 +++++++++++++--------- src/weatherApp.test.js | 15 +++++++++++---- src/weatherAppError.test.js | 2 +- 5 files changed, 33 insertions(+), 24 deletions(-) diff --git a/src/commonTestData.js b/src/commonTestData.js index 1e4ef41..d3a8437 100644 --- a/src/commonTestData.js +++ b/src/commonTestData.js @@ -44,7 +44,7 @@ export const weather = { }; export const ipInfo = { - region: "Moscow", + city: "Moscow", }; export const testBlob = new Blob([ diff --git a/src/pageTempaltes.js b/src/pageTempaltes.js index 351a8ab..aee3349 100644 --- a/src/pageTempaltes.js +++ b/src/pageTempaltes.js @@ -4,12 +4,10 @@ export const mainTemplate = `
- +
- Couldn't get image of map + Couldn't get image of map
Wait for city name @@ -26,17 +24,17 @@ export const mainTemplate = ` export const aboutTemplate = `
-

Приложение "Прогноз погоды"

+

Приложение "Прогноз погоды"

- Выполнение домашнего задания для лекции "Современный инструментарий при разработке клиентских (и не только - приложений)" + Выполнение домашнего задания для лекции "Современный инструментарий при разработке клиентских (и не только + приложений)"

О проекте

-

Приложение "Прогноз погоды" это Web приложение разработанное на языке JavaScript. Оно предназначено для +

Приложение "Прогноз погоды" это Web приложение разработанное на языке JavaScript. Оно предназначено для просмотра текущей погоды в конкретном городе.

Приложение показывает текущую температуру в градусах цельсия и общее состоянии погоды, обозначенное иконкой.

Так же приложение отображает компактную картинку с картой выбранного города.

-Main +Main
`; diff --git a/src/weatherApp.js b/src/weatherApp.js index 1d5e5da..2098864 100644 --- a/src/weatherApp.js +++ b/src/weatherApp.js @@ -28,11 +28,11 @@ export default async function weatherApp(rootElement) { } } - async function updateWeather(cityNameParam, updateHistoryFlag) { + async function updateWeather(cityNameParam) { const cityName = decodeURIComponent(cityNameParam); const weather = await getWeather(cityName); if (weather.cod === 200) { - if (updateHistoryFlag) await updateHistoryBlock(cityName); + await updateHistoryBlock(cityName); const map = await getMap(weather.coord); showMap(map); showWeather(weather); @@ -94,17 +94,17 @@ export default async function weatherApp(rootElement) { router.navigate(`/weather/${cityName}`); }); - rootElement.querySelectorAll("a").forEach((link) => - link.addEventListener("click", (event) => { + rootElement.addEventListener("click", (event) => { + if (event.target instanceof HTMLAnchorElement) { event.preventDefault(); - router.navigate(link.href); - }), - ); + router.navigate(event.target.href); + } + }); router.addRoute({ path: /^\/weather\/(?.+)$/, onEnter: async (params) => { - updateWeather(params.cityName, true); + updateWeather(params.cityName); }, }); @@ -113,7 +113,11 @@ export default async function weatherApp(rootElement) { onEnter: () => { rootElement.innerHTML = aboutTemplate; }, - onLeave: () => { + }); + + router.addRoute({ + path: "/", + onEnter: () => { rootElement.innerHTML = mainTemplate; }, }); diff --git a/src/weatherApp.test.js b/src/weatherApp.test.js index acd107d..7469039 100644 --- a/src/weatherApp.test.js +++ b/src/weatherApp.test.js @@ -3,6 +3,7 @@ import weatherApp from "./weatherApp"; import exteranlApi from "./externalRequests"; import { weather, ipInfo, testBlob } from "./commonTestData"; +import { aboutTemplate, mainTemplate } from "./pageTempaltes"; jest.mock("./externalRequests", () => ({ getWeather: jest.fn(), @@ -63,9 +64,6 @@ describe("Weather application tests", () => { const map = el.querySelector("#map"); expect(map).not.toBe(null); expect(map.alt).toBe("Couldn't get image of map"); - expect(map.src).toBe( - "blob:http://localhost:8080/dbdb41a6-c771-4692-bdc1-594a6dd28ef5", - ); }); it("User see temperature on startup", () => { @@ -99,6 +97,7 @@ describe("Weather application tests", () => { "City_3", "City_2", "City_1", + "Moscow", ]); }); @@ -165,7 +164,7 @@ describe("Weather application tests", () => { // Надо подождать, когда все асинк функции закончатся, а потом продолжать выполнять синхронный код await new Promise(process.nextTick); - expect(getAllHistoryParagraphs()).toStrictEqual(["DefaultCity"]); + expect(getAllHistoryParagraphs()).toStrictEqual(["DefaultCity", "Moscow"]); }); it("History loads from localStorage", async () => { @@ -179,4 +178,12 @@ describe("Weather application tests", () => { expect(getAllHistoryParagraphs()).toStrictEqual(["Moscow"]); }); + + it("Shoould open about and main pages when click on link", () => { + el.querySelector("a").click(); + expect(el.innerHTML).toBe(aboutTemplate); + + el.querySelector("a").click(); + expect(el.innerHTML).toBe(mainTemplate); + }); }); diff --git a/src/weatherAppError.test.js b/src/weatherAppError.test.js index a8b737e..fc92b7b 100644 --- a/src/weatherAppError.test.js +++ b/src/weatherAppError.test.js @@ -31,7 +31,7 @@ describe("Weather application tests", () => { const map = el.querySelector("#map"); expect(map).not.toBe(null); expect(map.alt).toBe("Couldn't get image of map"); - expect(map.src).toBe("http://localhost/"); + expect(map.src).toBe("http://localhost/weather/Moscow"); }); it("Error with getInfoByIP", async () => {