Skip to content

Commit

Permalink
fix(selenium): fix eti specs and minieti_spec; add deals popup
Browse files Browse the repository at this point in the history
  • Loading branch information
KirillGaliulin committed Feb 20, 2024
1 parent 47cfac1 commit f7e70a4
Show file tree
Hide file tree
Showing 9 changed files with 137 additions and 119 deletions.
3 changes: 2 additions & 1 deletion lib/apress/selenium_eti.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,16 @@
require "#{gem_directory}/lib/pages/company_site/eti/navigation_column"

# Попапы
require "#{gem_directory}/lib/pages/company_site/eti/popups/deals_popup"
require "#{gem_directory}/lib/pages/company_site/eti/popups/description_popup"
require "#{gem_directory}/lib/pages/company_site/eti/popups/exists_popup"
require "#{gem_directory}/lib/pages/company_site/eti/popups/groups_binding_popup"
require "#{gem_directory}/lib/pages/company_site/eti/popups/images_upload_popup"
require "#{gem_directory}/lib/pages/company_site/eti/popups/price_popup"
require "#{gem_directory}/lib/pages/company_site/eti/popups/public_state_popup"
require "#{gem_directory}/lib/pages/company_site/eti/popups/rubrics_binding_popup"
require "#{gem_directory}/lib/pages/company_site/eti/popups/traits_popup"
require "#{gem_directory}/lib/pages/company_site/eti/popups/wholesale_price_popup"
require "#{gem_directory}/lib/pages/company_site/eti/popups/exists_popup"

# Мини-ЕТИ.
require "#{gem_directory}/lib/pages/company_site/mini_eti/mini_eti"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,16 @@

it('введенное имя отображается') { expect(@cs_eti_table_products.name(@product)).to eq(@name) }

# Определяется через локатор какой проект, и в зависимости
# от этого ожидаемый результат. Если ни один из локаторов
# проектов не найден, то выводится ошибка 'locator not found'
# На БЛ, если товар без рубрики, то статус_публикации у него unpublished (опубликованный на ск).
# Если лимиты публикации на ск забиты, то статус_публикации у товара будет archived.
# На ПЦ, если товар без рубрики, то статус_публикации у него сразу archived.
# Здесь выполняется проверка, является ли статус_публикации archived,
# иначе проверка на unpublished для БЛ.
it 'товар не опубликован на портале' do
if @cs_eti_table.project_pulscen?
if @cs_eti_table_products.public_state(@product) == :archived
expect(@cs_eti_table_products.public_state(@product)).to eq(:archived)
elsif @cs_eti_table.project_blizko?
expect(@cs_eti_table_products.public_state(@product)).to eq(:unpublished)
else
raise ArgumentError, 'locator not found'
expect(@cs_eti_table_products.public_state(@product)).to eq(:unpublished)
end
end
end
Expand Down
40 changes: 12 additions & 28 deletions lib/apress/selenium_eti/spec/company_site/eti/product_price_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@
}
end

it 'введеная цена отображается' do
# Определяется через локатор какой проект, и в зависимости
# от этого ожидаемый результат. Если ни один из локаторов
# проектов не найден, то выводится ошибка 'locator not found'
it 'введеная цена отображается, в рублях' do
if @cs_eti_table.project_pulscen?
expect(@cs_eti_table_products.price(@product)).to eq("#{price[:price]} руб.")
elsif @cs_eti_table.project_blizko?
Expand All @@ -41,7 +44,7 @@
end

context 'когда цена от и до', story: 'когда цена от и до' do
context 'когда только "от"' do
context 'когда только От' do
let(:price) do
{
type: :range,
Expand All @@ -50,17 +53,11 @@
end

it 'введеная цена отображается' do
if @cs_eti_table.project_pulscen?
expect(@cs_eti_table_products.price(@product)).to eq("от #{price[:price]} руб.")
elsif @cs_eti_table.project_blizko?
expect(@cs_eti_table_products.price(@product)).to eq("от #{price[:price]} ₽")
else
raise ArgumentError, 'locator not found'
end
expect(@cs_eti_table_products.price(@product)).to include("от #{price[:price]}")
end
end

context 'когда только "до"' do
context 'когда только До' do
let(:price) do
{
type: :range,
Expand All @@ -69,17 +66,11 @@
end

it 'введеная цена отображается' do
if @cs_eti_table.project_pulscen?
expect(@cs_eti_table_products.price(@product)).to eq("до #{price[:price_max]} руб.")
elsif @cs_eti_table.project_blizko?
expect(@cs_eti_table_products.price(@product)).to eq("до #{price[:price_max]} ₽")
else
raise ArgumentError, 'locator not found'
end
expect(@cs_eti_table_products.price(@product)).to include("до #{price[:price_max]}")
end
end

context 'когда заполняем "от" и "до"' do
context 'когда заполняем От и До' do
let(:price) do
{
type: :range,
Expand Down Expand Up @@ -127,15 +118,8 @@
end

it 'введеная цена отображается' do
if @cs_eti_table.project_pulscen?
expect(@cs_eti_table_products.wholesale_price(@product))
.to eq("#{wholesale_price[:price]} руб. /шт. от #{wholesale_price[:min_qty]} шт.")
elsif @cs_eti_table.project_blizko?
expect(@cs_eti_table_products.wholesale_price(@product))
.to eq("#{wholesale_price[:price]} ₽ /шт. от #{wholesale_price[:min_qty]} шт.")
else
raise ArgumentError, 'locator not found'
end
expect(@cs_eti_table_products.wholesale_price(@product))
.to include(wholesale_price[:price].to_s, wholesale_price[:min_qty].to_s)
end
end

Expand All @@ -148,7 +132,7 @@
}
end

it 'введеная цена отображается' do
it 'введеная цена отображается, в рублях' do
if @cs_eti_table.project_pulscen?
expect(@cs_eti_table_products.wholesale_price(@product))
.to eq("от #{wholesale_price[:price]} руб. /шт. от #{wholesale_price[:min_qty]} шт.")
Expand Down
154 changes: 87 additions & 67 deletions lib/apress/selenium_eti/spec/company_site/mini_eti/minieti_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,108 +17,126 @@
@cs_eti_table.close_support_contacts if @cs_eti_table.close_support_contacts?(2)
end

describe 'Поля' do
context 'когда заполняем имя' do
before(:all) do
@name = Faker::Number.number(5)
describe 'Заполнение полей' do
context 'когда заполняется имя' do
before do
@name = Faker::Number.number(digits: 5).to_s
@cs_eti_table_products.add_product(name: @name)
@product = @cs_eti_table_products.product(name: @name)
end

it 'введенное имя отображается' do
expect(@cs_eti_table_products.name(@product)).to eq(@name)
end

context 'когда добавляем картинку', skip: !RUN_CONFIG.fetch('local_running', false).to_b do
before(:all) do
@battery = @cs_eti_table_products.battery(@product)
@image = @cs_eti_table_products.image(@product)
@cs_eti_table_products.upload_image(@product, type: :local, path: IMAGE_PATH)
end

it 'картинка появляется' do
expect(@cs_eti_table_products.image(@product)[:url]).to be_truthy
end

it 'счетчик изображений увеличится на 1' do
expect(@cs_eti_table_products.image(@product)[:counts]).to eq(@image[:counts] + 1)
end

it 'увеличивается заряд батарейки' do
expect(@cs_eti_table_products.battery(@product)[:level])
.to eq(@battery[:level] + CONFIG['battery_percents']['image'])
end
end
end

context 'когда заполняем цену' do
context 'когда загружается изображение' do
before(:all) do
@name = Faker::Number.number(5)
@name = Faker::Number.number(digits: 5).to_s
@cs_eti_table_products.add_product(name: @name)
@product = @cs_eti_table_products.product(name: @name)
@battery = @cs_eti_table_products.battery(@product)
@price = {type: :exact, price: Faker::Number.number(3)}
@cs_eti_table_products.set_price(@product, @price)
@image = @cs_eti_table_products.image(@product)
@cs_eti_table_products.upload_image(@product, type: :local, path: IMAGE_PATH)
end

it('введенная цена отображается') { expect(@cs_eti_table_products.price(@product)).to include(@price[:price]) }
it 'изображение появляется' do
expect(@cs_eti_table_products.image(@product)[:url]).to be_truthy
end

it 'счетчик изображений увеличится на 1' do
expect(@cs_eti_table_products.image(@product)[:counts]).to eq(@image[:counts] + 1)
end

it 'увеличивается заряд батарейки' do
expect(@cs_eti_table_products.battery(@product)[:level])
.to eq(@battery[:level] + CONFIG['battery_percents']['price'])
.to eq(@battery[:level] + CONFIG['battery_percents']['image'])
end
end

context 'когда заполняем цену от и до' do
before(:all) do
@name = Faker::Number.number(5)
@cs_eti_table_products.add_product(name: @name)
@product = @cs_eti_table_products.product(name: @name)
@battery = @cs_eti_table_products.battery(@product)
@price_range = {type: :range, price: Faker::Number.number(2), price_max: Faker::Number.number(3)}
describe 'Установка розничных цен', feature: 'company_site/eti/product_price_spec: Установка цен' do
context 'когда цена точная' do
before(:all) do
@name = Faker::Number.number(digits: 5).to_s
@price = {type: :exact, price: Faker::Number.number(digits: 3)}
@cs_eti_table_products.add_product(name: @name)
@product = @cs_eti_table_products.product(name: @name)
@battery = @cs_eti_table_products.battery(@product)
@cs_eti_table_products.set_price(@product, @price)
end

@cs_eti_table_products.set_price(@product, @price_range)
end
it 'введенная цена отображается' do
expect(@cs_eti_table_products.price(@product)).to include(@price[:price].to_s)
end

it 'введенная цена отображается' do
expect(@cs_eti_table_products.price(@product)).to include @price_range[:price], @price_range[:price_max]
it 'увеличивается заряд батарейки' do
expect(@cs_eti_table_products.battery(@product)[:level])
.to eq(@battery[:level] + CONFIG['battery_percents']['price'])
end
end
end

context 'когда заполняем цену со скидкой' do
before(:all) do
@name = Faker::Number.number(5)
@cs_eti_table_products.add_product(name: @name)
@product = @cs_eti_table_products.product(name: @name)
@battery = @cs_eti_table_products.battery(@product)
@discount_price = {
type: :discount,
price: Faker::Number.number(3),
new_price: Faker::Number.number(2),
expires_at: Time.now.strftime('%d.%m.%Y'),
}
context 'когда цена от и до' do
before(:all) do
@name = Faker::Number.number(digits: 5).to_s
@cs_eti_table_products.add_product(name: @name)
@product = @cs_eti_table_products.product(name: @name)
@battery = @cs_eti_table_products.battery(@product)
@price_range = {
type: :range,
price: Faker::Number.number(digits: 2),
price_max: Faker::Number.number(digits: 3),
}
@cs_eti_table_products.set_price(@product, @price_range)
end

@cs_eti_table_products.set_price(@product, @discount_price)
it 'введенная цена отображается' do
expect(@cs_eti_table_products.price(@product))
.to include(@price_range[:price].to_s, @price_range[:price_max].to_s)
end
end

it 'введенные цены и дата окончания скидки отображаются' do
expect(@cs_eti_table_products.price(@product)).to include(@discount_price[:price], @discount_price[:new_price])
context 'когда цена со скидкой' do
before(:all) do
@name = Faker::Number.number(digits: 5).to_s
@cs_eti_table_products.add_product(name: @name)
@product = @cs_eti_table_products.product(name: @name)
@battery = @cs_eti_table_products.battery(@product)
@discount_price = {
type: :discount,
price: Faker::Number.number(digits: 3),
new_price: Faker::Number.number(digits: 2),
expires_at: Time.now.strftime('%d.%m.%Y'),
}

@cs_eti_table_products.set_price(@product, @discount_price)
end

it 'введенные цены и дата окончания скидки отображаются' do
expect(@cs_eti_table_products.price(@product))
.to include(@discount_price[:price].to_s, @discount_price[:new_price].to_s)
end
end
end

context 'когда заполняем наличие' do
context 'когда заполняется наличие' do
before do
@product = @cs_eti_table_products.add_product(name: Faker::Number.number(5), exists: :available)
@product = @cs_eti_table_products.add_product(
name: Faker::Number.number(digits: 5).to_s,
exists: :available
)
end

it 'для товара отобразится статус "В наличии"' do
expect(@cs_eti_table_products.exists(@product)).to match(/[Вв] наличии/)
end
end

context 'когда заполняем рубрику' do
context 'когда заполняется рубрика' do
before(:all) do
@product = @cs_eti_table_products.add_product(name: Faker::Number.number(5), rubric: CONFIG['eti']['rubric'])
@product = @cs_eti_table_products.add_product(
name: Faker::Number.number(digits: 5).to_s,
rubric: CONFIG['eti']['rubric']
)
end

it 'привязывается рубрика' do
Expand Down Expand Up @@ -173,30 +191,32 @@

describe 'Удаление товара' do
before do
name = Faker::Number.number(5)
name = Faker::Number.number(digits: 5).to_s
@product = @cs_eti_table_products.add_product(name: name)
end

it 'товар удаляется' do
expect { @cs_eti_table_products.delete_product(@product) } .to change { @product.visible? }.from(true).to(false)
expect { @cs_eti_table_products.delete_product(@product) }
.to change { @product.visible? }.from(true).to(false)
end
end

describe 'Копирование товара' do
before do
@fields = {
name: Faker::Number.number(5),
name: Faker::Number.number(digits: 5).to_s,
price: {
type: :exact,
price: Faker::Number.number(5),
price: Faker::Number.number(digits: 5),
},
}
@product = @cs_eti_table_products.add_product(@fields)
@cs_eti_table_products.copy_product(@product)
end

it 'товар скопирован' do
expect(@cs_eti_table_products.products_elements[0].text).to eq(@cs_eti_table_products.products_elements[1].text)
expect(@cs_eti_table_products.products_elements[0].text)
.to eq(@cs_eti_table_products.products_elements[1].text)
end
end
end
4 changes: 2 additions & 2 deletions lib/pages/company_site/eti/header.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ module ETI
class Header < Page
include CompanySite::ETI

checkbox(:exact_search, css: '#exact_search')
checkbox(:exact_search, css: '#search-checkbox-exact')
text_area(:search_string, xpath: "//*[@id='product-bindings-search']")
button(:search_button, css: '.js-search-submit')
button(:search_button, css: '.js-eti-search-submit')
div(:search_type, css: '.selected-search-type')
label(:full_search, css: 'label[data-name="По названию, кр. описанию, артикулу"]')
label(:search_by_name, css: 'label[data-name="По названию"]')
Expand Down
13 changes: 13 additions & 0 deletions lib/pages/company_site/eti/popups/deals_popup.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal: true

module CompanySite
module ETI
class Table
class DealsPopup < self
checkbox(:deal_checkbox, css: '.js-input-deals')
checkbox(:deal_product_checkbox, xpath: "//*[text()[contains(., \'#{CONFIG['offer_with_product']}\')]]/input")
button(:save_deals, css: 'div.ui-dialog div > button:nth-child(1)')
end
end
end
end
2 changes: 1 addition & 1 deletion lib/pages/company_site/eti/popups/images_upload_popup.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class ImagesUploadPopup < self
div(:popup, css: '.js-popup-photo')

button(:close, css: '.ui-dialog:not([style*="display: none"]) .ui-dialog-titlebar-close')
file_field(:upload_image_input, css: '.js-popup-photo .js-upload-input')
file_field(:upload_image_input, css: '.js-popup-photo .js-upload-image-input')
text_area(:image_url, css: '.js-popup-photo .js-download-input')
button(:image_url_submit, css: '.js-popup-photo .js-download-button')
elements(:uploaded_images, css: '.js-popup-photo .js-img')
Expand Down
Loading

0 comments on commit f7e70a4

Please sign in to comment.