У нас есть плагин под названием Flexorder, основная функция которого состоит в том, чтобы синхронизировать заказы Woocommerce с Google Sheets и получить доступ к ним там. Одним из его ключевых функций является обновление статуса заказа, выбрав опцию выпадения в столбце статуса заказа в Google Sheets, и обновленное состояние затем отражается в соответствующем статусе заказа в Woocommerce. < /P>
Я провожу тестирование автоматизации для нашего плагина, используя драматург и JavaScript. Тем не менее, я сталкиваюсь с проблемой при разработке сценария автоматизации для тестового примера. Google Sheets API, я обновлю опцию раскрывающегося списка в столбце состояния заказа, а затем проверю статус заказа, используя API WooCommerce, чтобы убедиться, что статус заказа правильно обновлен в WooCommerce.
, где я сталкиваюсь с проблемой: < /h3>
[*] В первом тестовом примере: Статус заказа в Google Sheets успешно обновленный. Woocommerce.
Проверка вручную, функция работает правильно, но она проходит в тестировании автоматизации.
< /ul>
Сообщения об ошибках: < /h3>
Error: expect(received).toBe(expected) // Object.is equality
Expected: "wc-processing"
Received: "failed"
32 | const wooOrder = await statusUpdater.fetchOrderFromWooCommerce(storedOrder.id);
33 | expect(wooOrder.id).toBe(Number(storedOrder.id));
> 34 | expect(wooOrder.status).toBe(storedOrder.status);
< /code>
const { google } = require('googleapis');
const WooCommerceRestApi = require("@woocommerce/woocommerce-rest-api").default;
const updatedOrders = [];
const orderStatuses = ["wc-pending", "wc-processing", "wc-on-hold", "wc-completed", "wc-cancelled", "wc-refunded", "wc-failed", "wc-checkout-draft"];
class OrderStatusUpdater {
constructor(authConfigPath) {
this.authConfigPath = authConfigPath;
this.api = new WooCommerceRestApi({
url: process.env.SITE_URL,
consumerKey: process.env.WOOCOMMERCE_CONSUMER_KEY,
consumerSecret: process.env.WOOCOMMERCE_CONSUMER_SECRET,
version: 'wc/v3'
});
}
async getAccessToken() {
const auth = new google.auth.GoogleAuth({
keyFile: this.authConfigPath,
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
});
const authClient = await auth.getClient();
const accessToken = await authClient.getAccessToken();
return accessToken.token;
}
async fetchFirstOrder(range) {
const accessToken = await this.getAccessToken();
const sheets = google.sheets({ version: 'v4', auth: this.auth });
const response = await sheets.spreadsheets.values.get({
spreadsheetId: process.env.GOOGLE_SHEET_ID,
range,
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
return response.data.values ? response.data.values[0] : null;
}
async updateOrderStatusInSheet(orderId, newStatus) {
if (!orderStatuses.includes(newStatus)) {
throw new Error(`Invalid status: ${newStatus}`);
}
const accessToken = await this.getAccessToken();
const sheets = google.sheets({ version: 'v4', auth: this.auth });
const range = `Orders!C2`;
await sheets.spreadsheets.values.update({
spreadsheetId: process.env.GOOGLE_SHEET_ID,
range,
valueInputOption: 'USER_ENTERED',
resource: {
values: [[newStatus]]
},
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
updatedOrders.push({ id: orderId, status: newStatus });
console.log(`Order ID ${orderId} status updated to "${newStatus}" in Google Sheets`);
}
async updateDropdownOptions(sheetId) {
try {
const sheets = google.sheets({ version: 'v4', auth: await this.auth.getClient() });
const dataValidationRule = {
requests: [
{
setDataValidation: {
range: {
sheetId: sheetId, // Sheet ID (not spreadsheet ID)
startRowIndex: 1, // Row where dropdown should start
startColumnIndex: 2, // Column where dropdown should be applied
endColumnIndex: 3
},
rule: {
condition: {
type: 'ONE_OF_LIST',
values: orderStatuses.map(status => ({ userEnteredValue: status }))
},
strict: true,
showCustomUi: true
}
}
}
]
};
const response = await sheets.spreadsheets.batchUpdate({
spreadsheetId: process.env.GOOGLE_SHEET_ID,
resource: dataValidationRule
});
console.log('Dropdown options updated in Google Sheets:', response.data);
} catch (error) {
console.error('Error updating dropdown options:', error.message);
}
}
async fetchOrderFromWooCommerce(orderId) {
try {
const response = await this.api.get(`orders/${orderId}`);
return response.data;
} catch (error) {
console.error('Error fetching order from WooCommerce:', error.response?.data || error.message);
throw error;
}
}
getRandomStatus() {
return orderStatuses[Math.floor(Math.random() * orderStatuses.length)];
}
}
module.exports = {
OrderStatusUpdater,
updatedOrders
};
< /code>
const { test, expect } = require('@playwright/test');
const { OrderStatusUpdater, updatedOrders } = require('../../test-utils/updateOrderStatus');
test.describe('Google Sheets to WooCommerce Order Status Sync', () => {
let statusUpdater;
test.beforeAll(() => {
statusUpdater = new OrderStatusUpdater('./tests/utilities/upload_key.json');
});
test('Update order status in Google Sheets', async ({ page }) => {
const firstOrder = await statusUpdater.fetchFirstOrder('Orders!A2:Z2');
const [orderId, , currentStatus] = firstOrder;
console.log(`Current Status of Order ID ${orderId}: ${currentStatus}`);
const newStatus = statusUpdater.getRandomStatus();
await statusUpdater.updateOrderStatusInSheet(orderId, newStatus);
await page.waitForTimeout(20000);
const storedOrder = updatedOrders.find(order => order.id === orderId);
expect(storedOrder).toBeDefined();
expect(storedOrder.status).toBe(newStatus);
console.log('Updated Orders Array:', updatedOrders);
});
test('Validate updated order status in WooCommerce', async () => {
const storedOrder = updatedOrders[0];
expect(storedOrder).toBeDefined();
const wooOrder = await statusUpdater.fetchOrderFromWooCommerce(storedOrder.id);
expect(wooOrder.id).toBe(Number(storedOrder.id));
expect(wooOrder.status).toBe(storedOrder.status);
console.log(`Order ID ${storedOrder.id} status in WooCommerce: ${wooOrder.status}`);
});
});
Подробнее здесь: https://stackoverflow.com/questions/794 ... ut-works-m
Статус заказа WooCommerce не обновляется через API в тестировании автоматизации, но работает вручную ⇐ Javascript
Форум по Javascript
1739110933
Anonymous
У нас есть плагин под названием Flexorder, основная функция которого состоит в том, чтобы синхронизировать заказы Woocommerce с Google Sheets и получить доступ к ним там. Одним из его ключевых функций является обновление статуса заказа, выбрав опцию выпадения в столбце статуса заказа в Google Sheets, и обновленное состояние затем отражается в соответствующем статусе заказа в Woocommerce. < /P>
Я провожу тестирование автоматизации для нашего плагина, используя драматург и JavaScript. Тем не менее, я сталкиваюсь с проблемой при разработке сценария автоматизации для тестового примера. Google Sheets API, я обновлю опцию раскрывающегося списка в столбце состояния заказа, а затем проверю статус заказа, используя API WooCommerce, чтобы убедиться, что статус заказа правильно обновлен в WooCommerce.
, где я сталкиваюсь с проблемой: < /h3>
[*] В первом тестовом примере: Статус заказа в Google Sheets успешно обновленный. Woocommerce.
Проверка вручную, функция работает правильно, но она проходит в тестировании автоматизации.
< /ul>
Сообщения об ошибках: < /h3>
Error: expect(received).toBe(expected) // Object.is equality
Expected: "wc-processing"
Received: "failed"
32 | const wooOrder = await statusUpdater.fetchOrderFromWooCommerce(storedOrder.id);
33 | expect(wooOrder.id).toBe(Number(storedOrder.id));
> 34 | expect(wooOrder.status).toBe(storedOrder.status);
< /code>
const { google } = require('googleapis');
const WooCommerceRestApi = require("@woocommerce/woocommerce-rest-api").default;
const updatedOrders = [];
const orderStatuses = ["wc-pending", "wc-processing", "wc-on-hold", "wc-completed", "wc-cancelled", "wc-refunded", "wc-failed", "wc-checkout-draft"];
class OrderStatusUpdater {
constructor(authConfigPath) {
this.authConfigPath = authConfigPath;
this.api = new WooCommerceRestApi({
url: process.env.SITE_URL,
consumerKey: process.env.WOOCOMMERCE_CONSUMER_KEY,
consumerSecret: process.env.WOOCOMMERCE_CONSUMER_SECRET,
version: 'wc/v3'
});
}
async getAccessToken() {
const auth = new google.auth.GoogleAuth({
keyFile: this.authConfigPath,
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
});
const authClient = await auth.getClient();
const accessToken = await authClient.getAccessToken();
return accessToken.token;
}
async fetchFirstOrder(range) {
const accessToken = await this.getAccessToken();
const sheets = google.sheets({ version: 'v4', auth: this.auth });
const response = await sheets.spreadsheets.values.get({
spreadsheetId: process.env.GOOGLE_SHEET_ID,
range,
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
return response.data.values ? response.data.values[0] : null;
}
async updateOrderStatusInSheet(orderId, newStatus) {
if (!orderStatuses.includes(newStatus)) {
throw new Error(`Invalid status: ${newStatus}`);
}
const accessToken = await this.getAccessToken();
const sheets = google.sheets({ version: 'v4', auth: this.auth });
const range = `Orders!C2`;
await sheets.spreadsheets.values.update({
spreadsheetId: process.env.GOOGLE_SHEET_ID,
range,
valueInputOption: 'USER_ENTERED',
resource: {
values: [[newStatus]]
},
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
updatedOrders.push({ id: orderId, status: newStatus });
console.log(`Order ID ${orderId} status updated to "${newStatus}" in Google Sheets`);
}
async updateDropdownOptions(sheetId) {
try {
const sheets = google.sheets({ version: 'v4', auth: await this.auth.getClient() });
const dataValidationRule = {
requests: [
{
setDataValidation: {
range: {
sheetId: sheetId, // Sheet ID (not spreadsheet ID)
startRowIndex: 1, // Row where dropdown should start
startColumnIndex: 2, // Column where dropdown should be applied
endColumnIndex: 3
},
rule: {
condition: {
type: 'ONE_OF_LIST',
values: orderStatuses.map(status => ({ userEnteredValue: status }))
},
strict: true,
showCustomUi: true
}
}
}
]
};
const response = await sheets.spreadsheets.batchUpdate({
spreadsheetId: process.env.GOOGLE_SHEET_ID,
resource: dataValidationRule
});
console.log('Dropdown options updated in Google Sheets:', response.data);
} catch (error) {
console.error('Error updating dropdown options:', error.message);
}
}
async fetchOrderFromWooCommerce(orderId) {
try {
const response = await this.api.get(`orders/${orderId}`);
return response.data;
} catch (error) {
console.error('Error fetching order from WooCommerce:', error.response?.data || error.message);
throw error;
}
}
getRandomStatus() {
return orderStatuses[Math.floor(Math.random() * orderStatuses.length)];
}
}
module.exports = {
OrderStatusUpdater,
updatedOrders
};
< /code>
const { test, expect } = require('@playwright/test');
const { OrderStatusUpdater, updatedOrders } = require('../../test-utils/updateOrderStatus');
test.describe('Google Sheets to WooCommerce Order Status Sync', () => {
let statusUpdater;
test.beforeAll(() => {
statusUpdater = new OrderStatusUpdater('./tests/utilities/upload_key.json');
});
test('Update order status in Google Sheets', async ({ page }) => {
const firstOrder = await statusUpdater.fetchFirstOrder('Orders!A2:Z2');
const [orderId, , currentStatus] = firstOrder;
console.log(`Current Status of Order ID ${orderId}: ${currentStatus}`);
const newStatus = statusUpdater.getRandomStatus();
await statusUpdater.updateOrderStatusInSheet(orderId, newStatus);
await page.waitForTimeout(20000);
const storedOrder = updatedOrders.find(order => order.id === orderId);
expect(storedOrder).toBeDefined();
expect(storedOrder.status).toBe(newStatus);
console.log('Updated Orders Array:', updatedOrders);
});
test('Validate updated order status in WooCommerce', async () => {
const storedOrder = updatedOrders[0];
expect(storedOrder).toBeDefined();
const wooOrder = await statusUpdater.fetchOrderFromWooCommerce(storedOrder.id);
expect(wooOrder.id).toBe(Number(storedOrder.id));
expect(wooOrder.status).toBe(storedOrder.status);
console.log(`Order ID ${storedOrder.id} status in WooCommerce: ${wooOrder.status}`);
});
});
Подробнее здесь: [url]https://stackoverflow.com/questions/79425054/woocommerce-order-status-not-updating-via-api-in-automation-testing-but-works-m[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия