Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,10 @@ storybook-static
*.sw?

playwright-report
test-results
test-results

# Playwright
/playwright-report/
/blob-report/
/playwright/.cache/
/playwright/.auth/
25 changes: 1 addition & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,6 @@
# Стартер на JavaScript для проекта Stellar Burger

## Процедура создания коммита с проверками

При создании коммита автоматически запускаются проверка линтерами `stylelint`, `eslint` и форматирование `prettier`.

Если линтер обнаружит ошибки:

- Коммит создан не будет
- Необходимо исправить все выявленные проблемы
- Добавить исправленные файлы в индекс: `git add .`
- Повторить коммит

**Рекомендация:**
Для предотвращения ошибок на этапе коммита предварительно выполните:
`npm run lint`. Это позволит выявить и исправить проблемы до создания коммита.

Есть также команды для запуска проверок по отдельности:

- `npm run eslint` - запускает проверку линтера и исправляет проблемы, которые можно исправить автоматически,
- `npm run stylelint` - запускает проверку литера для файлов стилей и исправляет проблемы, которые можно исправить автоматически,
- `npm run prettier` - исправляет ошибки форматирования кода.

Можно добавить автозапуск этих команд при сохранении файла в вашей IDE.

Для создания коммита рекомендуется запускать команду `npm run commit`. Она позволяет обеспечить соответствие описаний коммитов [общепринятым соглашениям](https://www.conventionalcommits.org/en/v1.0.0/).
**Ссылка на деплой проекта:** [https://stellar-rastoki.ru](https://stellar-rastoki.ru)

В проекте настроены алиасы, которые можно использовать при импорте модулей:

Expand Down
62 changes: 62 additions & 0 deletions e2e/constructor.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { test, expect } from '@playwright/test';

const API_URL = '*://new-stellarburgers.education-services.ru/api';

test.describe('Страница Конструктор', () => {
test.beforeEach(async ({ page, context }) => {
await page.routeFromHAR('e2e/har/api.har', {
url: `${API_URL}/**`,
update: false,
});

await context.addCookies([
{
name: 'accessToken',
value: 'mock-access-token',
domain: 'localhost',
path: '/',
},
]);

await page.addInitScript(() => {
window.localStorage.setItem('refreshToken', 'mock-refresh-token');
});

await page.goto('/');
});

test('Полный путь пользователя -> сборка бургера, просмотр ингредиента и оформление заказа', async ({ page }) => {
const modal = page.locator('#modals > div').first();
const constructorSection = page.locator('section[class*="burger_constructor"]');

const bunIngredient = page.getByText('Краторная булка N-200i').first();
const sauceIngredient = page.getByText('Соус с шипами Антарианского плоскоходца').first();

const bunTarget = page.getByText('Пожалуйста, перенесите сюда булку').first();
const sauceTarget = page.getByText('Здесь расположите начинки и соусы').first();

await bunIngredient.click();

await expect(modal).toBeVisible();
await expect(modal.getByText('Детали ингредиента')).toBeVisible();
await expect(modal.getByText('Краторная булка N-200i')).toBeVisible();
await expect(modal.getByText('420')).toBeVisible();

await modal.locator('button').first().click();
await expect(modal).not.toBeVisible();

await bunIngredient.dragTo(bunTarget);
await sauceIngredient.dragTo(sauceTarget);

await expect(constructorSection.getByText('Краторная булка N-200i (верх)')).toBeVisible();
await expect(constructorSection.getByText('Соус с шипами Антарианского плоскоходца')).toBeVisible();

await page.getByRole('button', { name: /оформить заказ/i }).click();

await expect(modal).toBeVisible();
await expect(modal.getByText('Детали заказа')).toBeVisible();

await modal.locator('button').first().click();
await expect(modal).not.toBeVisible();
});
});
1 change: 1 addition & 0 deletions e2e/har/079eb3bb914f845e67d235ab21e1c1b0d8a240b9.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"success":false,"message":"Token is invalid"}
31 changes: 31 additions & 0 deletions e2e/har/4705780f21157dc52d4ab08b6cc4ed90ed9e6da4.dat
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { createApi, fetchBaseQuery } from "/node_modules/.vite/deps/@reduxjs_toolkit_query_react.js?v=59810ea1";
import Cookies from "/node_modules/.vite/deps/js-cookie.js?v=dd4b359e";
import API_URL from "/src/utils/constants.ts";
export const ingredientsApi = createApi({
reducerPath: "ingredientsApi",
baseQuery: fetchBaseQuery({
baseUrl: API_URL,
prepareHeaders: (headers) => {
const token = Cookies.get("accessToken");
if (token) {
headers.set("authorization", token);
}
return headers;
}
}),
endpoints: (builder) => ({
getIngredients: builder.query({
query: () => "/ingredients"
}),
createOrder: builder.mutation({
query: (orderData) => ({
url: "/orders",
method: "POST",
body: orderData
})
})
})
});
export const { useGetIngredientsQuery, useCreateOrderMutation } = ingredientsApi;

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZ3JlZGllbnRzQXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUFwaSwgZmV0Y2hCYXNlUXVlcnkgfSBmcm9tICdAcmVkdXhqcy90b29sa2l0L3F1ZXJ5L3JlYWN0JztcclxuaW1wb3J0IENvb2tpZXMgZnJvbSAnanMtY29va2llJztcclxuXHJcbmltcG9ydCBBUElfVVJMIGZyb20gJy4uLy4uL3V0aWxzL2NvbnN0YW50cyc7XHJcblxyXG5pbXBvcnQgdHlwZSB7IFRJbmdyZWRpZW50IH0gZnJvbSAnQC91dGlscy9iYXNlVHlwZXMnO1xyXG5cclxudHlwZSBUSW5ncmVkaWVudHNSZXNwb25zZSA9IHtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIGRhdGE6IFRJbmdyZWRpZW50W107XHJcbn07XHJcblxyXG50eXBlIFRPcmRlclJlc3BvbnNlID0ge1xyXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIG9yZGVyOiB7XHJcbiAgICBudW1iZXI6IG51bWJlcjtcclxuICB9O1xyXG59O1xyXG5cclxudHlwZSBUT3JkZXJEYXRhID0ge1xyXG4gIGluZ3JlZGllbnRzOiBzdHJpbmdbXTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpbmdyZWRpZW50c0FwaSA9IGNyZWF0ZUFwaSh7XHJcbiAgcmVkdWNlclBhdGg6ICdpbmdyZWRpZW50c0FwaScsXHJcbiAgYmFzZVF1ZXJ5OiBmZXRjaEJhc2VRdWVyeSh7XHJcbiAgICBiYXNlVXJsOiBBUElfVVJMLFxyXG4gICAgcHJlcGFyZUhlYWRlcnM6IChoZWFkZXJzKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRva2VuID0gQ29va2llcy5nZXQoJ2FjY2Vzc1Rva2VuJyk7XHJcbiAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIGhlYWRlcnMuc2V0KCdhdXRob3JpemF0aW9uJywgdG9rZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBoZWFkZXJzO1xyXG4gICAgfSxcclxuICB9KSxcclxuICBlbmRwb2ludHM6IChidWlsZGVyKSA9PiAoe1xyXG4gICAgZ2V0SW5ncmVkaWVudHM6IGJ1aWxkZXIucXVlcnk8VEluZ3JlZGllbnRzUmVzcG9uc2UsIHZvaWQ+KHtcclxuICAgICAgcXVlcnk6ICgpID0+ICcvaW5ncmVkaWVudHMnLFxyXG4gICAgfSksXHJcbiAgICBjcmVhdGVPcmRlcjogYnVpbGRlci5tdXRhdGlvbjxUT3JkZXJSZXNwb25zZSwgVE9yZGVyRGF0YT4oe1xyXG4gICAgICBxdWVyeTogKG9yZGVyRGF0YSkgPT4gKHtcclxuICAgICAgICB1cmw6ICcvb3JkZXJzJyxcclxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICBib2R5OiBvcmRlckRhdGEsXHJcbiAgICAgIH0pLFxyXG4gICAgfSksXHJcbiAgfSksXHJcbn0pO1xyXG5cclxuZXhwb3J0IGNvbnN0IHsgdXNlR2V0SW5ncmVkaWVudHNRdWVyeSwgdXNlQ3JlYXRlT3JkZXJNdXRhdGlvbiB9ID0gaW5ncmVkaWVudHNBcGk7XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxXQUFXLHNCQUFzQjtBQUMxQyxPQUFPLGFBQWE7QUFFcEIsT0FBTyxhQUFhO0FBcUJiLGFBQU0saUJBQWlCLFVBQVU7QUFBQSxFQUN0QyxhQUFhO0FBQUEsRUFDYixXQUFXLGVBQWU7QUFBQSxJQUN4QixTQUFTO0FBQUEsSUFDVCxnQkFBZ0IsQ0FBQyxZQUFZO0FBQzNCLFlBQU0sUUFBUSxRQUFRLElBQUksYUFBYTtBQUN2QyxVQUFJLE9BQU87QUFDVCxnQkFBUSxJQUFJLGlCQUFpQixLQUFLO0FBQUEsTUFDcEM7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0YsQ0FBQztBQUFBLEVBQ0QsV0FBVyxDQUFDLGFBQWE7QUFBQSxJQUN2QixnQkFBZ0IsUUFBUSxNQUFrQztBQUFBLE1BQ3hELE9BQU8sTUFBTTtBQUFBLElBQ2YsQ0FBQztBQUFBLElBQ0QsYUFBYSxRQUFRLFNBQXFDO0FBQUEsTUFDeEQsT0FBTyxDQUFDLGVBQWU7QUFBQSxRQUNyQixLQUFLO0FBQUEsUUFDTCxRQUFRO0FBQUEsUUFDUixNQUFNO0FBQUEsTUFDUjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDRixDQUFDO0FBRU0sYUFBTSxFQUFFLHdCQUF3Qix1QkFBdUIsSUFBSTsiLCJuYW1lcyI6W119
1 change: 1 addition & 0 deletions e2e/har/6f267e4b3d7a28444b948ab5a105c283be73028a.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"success":true,"user":{"email":"krivonra@mail.ru","name":"krivonraf"}}
Loading