Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Argo Setup #335

Merged
merged 2 commits into from
Sep 27, 2024
Merged
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
5 changes: 5 additions & 0 deletions app/commands/generate_release_command.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class GenerateReleaseCommand < ApplicationCommand
end

def execute
validate_localizations
setup_options
frame("Generating release") do
logger.headline("Version: #{params[:version]}")
Expand All @@ -25,6 +26,10 @@ def execute

private

def validate_localizations
LocalizationsValidator.new.call
end

def setup_options
@version_from_file = sys.read_file("VERSION").strip
params[:version] ||= @version_from_file
Expand Down
Original file line number Diff line number Diff line change
@@ -1,91 +1,90 @@
# frozen_string_literal: true

require_relative "../test_helper"

class LocalizationsTest < ActiveSupport::TestCase
class LocalizationsValidator
LOCALIZATION_DIRECTORY = "data/localizations"
CATEGORY_DIRECTORY = "data/categories"
ATTRIUBTES_DIRECTORY = "data/attributes.yml"
VALUES_DIRECTORY = "data/values.yml"

Dir.glob("#{LOCALIZATION_DIRECTORY}/categories/*.yml").each do |file|
language = File.basename(file, ".yml")
localizations = YAML.load_file(file)
Dir.glob("#{CATEGORY_DIRECTORY}/*.yml").each do |file|
vertical = File.basename(file, ".yml")
categories = YAML.load_file(file)
def call
validate_categories
validate_attributes
validate_values
validate_localization_loales
end

private

def validate_categories
Dir.glob("#{LOCALIZATION_DIRECTORY}/categories/*.yml").each do |file|
language = File.basename(file, ".yml")
localizations = YAML.load_file(file)
Dir.glob("#{CATEGORY_DIRECTORY}/*.yml").each do |file|
vertical = File.basename(file, ".yml")
categories = YAML.load_file(file)

test "#{vertical} has localization keys in #{language} for every category" do
missing_localization_keys = categories.reject do |category|
localizations[language]["categories"][category["id"]]
end
error_message = "Missing localization keys for #{missing_localization_keys.map { _1["id"] }}"
assert missing_localization_keys.empty?, error_message
end
raise error_message unless missing_localization_keys.empty?

test "#{vertical} has localization values in #{language} for every category" do
missing_localizations = categories.reject do |category|
localizations.dig(language, "categories", category["id"], "name")
end

error_message = "Missing localization names for #{missing_localizations.map { _1["id"] }}"
assert missing_localizations.empty?, error_message
raise error_message unless missing_localizations.empty?
end
end
end

Dir.glob("#{LOCALIZATION_DIRECTORY}/attributes/*.yml").each do |file|
language = File.basename(file, ".yml")
localizations = YAML.load_file(file)
attributes = YAML.load_file(ATTRIUBTES_DIRECTORY).values.flatten
def validate_attributes
Dir.glob("#{LOCALIZATION_DIRECTORY}/attributes/*.yml").each do |file|
language = File.basename(file, ".yml")
localizations = YAML.load_file(file)
attributes = YAML.load_file(ATTRIUBTES_DIRECTORY).values.flatten

test "attributes have localization keys in #{language}" do
missing_localization_keys = attributes.reject do |attribute|
localizations[language]["attributes"][attribute["friendly_id"]]
end
error_message = "Missing localization keys for #{missing_localization_keys.map { _1["friendly_id"] }}"
assert missing_localization_keys.empty?, error_message
end
raise error_message unless missing_localization_keys.empty?

test "attributes have localization values for name in #{language}" do
missing_localizations = attributes.reject do |attribute|
localizations.dig(language, "attributes", attribute["friendly_id"], "name")
end
error_message = "Missing localization names for #{missing_localizations.map { _1["friendly_id"] }}"
assert missing_localizations.empty?, error_message
raise error_message unless missing_localizations.empty?
end
end

Dir.glob("#{LOCALIZATION_DIRECTORY}/values/*.yml").each do |file|
language = File.basename(file, ".yml")
localizations = YAML.load_file(file)
values = YAML.load_file(VALUES_DIRECTORY)
def validate_values
Dir.glob("#{LOCALIZATION_DIRECTORY}/values/*.yml").each do |file|
language = File.basename(file, ".yml")
localizations = YAML.load_file(file)
values = YAML.load_file(VALUES_DIRECTORY)

test "values have localization keys in #{language}" do
missing_localization_keys = values.reject do |value|
localizations[language]["values"][value["friendly_id"]]
end
error_message = "Missing localization keys for #{missing_localization_keys.map { _1["friendly_id"] }}"
assert missing_localization_keys.empty?, error_message
end
raise error_message unless missing_localization_keys.empty?

test "values have localizations for name in #{language}" do
missing_localizations = values.reject do |value|
localizations.dig(language, "values", value["friendly_id"], "name")
end
error_message = "Missing localization names for #{missing_localizations.map { _1["friendly_id"] }}"
assert missing_localizations.empty?, error_message
raise error_message unless missing_localizations.empty?
end
end

test "all resources have the same locales" do
def validate_localization_loales
categories_locales = Dir.glob("#{LOCALIZATION_DIRECTORY}/categories/*.yml").map { File.basename(_1, ".yml") }
attributes_locales = Dir.glob("#{LOCALIZATION_DIRECTORY}/attributes/*.yml").map { File.basename(_1, ".yml") }
values_locales = Dir.glob("#{LOCALIZATION_DIRECTORY}/values/*.yml").map { File.basename(_1, ".yml") }

all_locales = (categories_locales + attributes_locales + values_locales).uniq
assert_equal all_locales, categories_locales
assert_equal all_locales, attributes_locales
assert_equal all_locales, values_locales
error_message = "Not all locales have the same set of localizations"
raise error_message unless categories_locales == attributes_locales && attributes_locales == values_locales
end
end
20 changes: 20 additions & 0 deletions argo_translation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
source_language: en
target_languages: [cs, da, de, es, fi, fr, it, ja, ko, nb, nl, pl, pt-BR, pt-PT, sv, th, tr, vi, zh-CN, zh-TW]
spartan-jack marked this conversation as resolved.
Show resolved Hide resolved
components:
- name: 'Attributes'
audience: [buyer, merchant, partner]
owners: ['@Shopify/taxonomy-tree-squad']
paths:
- data/localizations/attributes/{{language}}.yml

- name: 'Categories'
audience: [buyer, merchant, partner]
owners: ['@Shopify/taxonomy-tree-squad']
paths:
- data/localizations/categories/{{language}}.yml

- name: 'Values'
audience: [buyer, merchant, partner]
owners: ['@Shopify/taxonomy-tree-squad']
paths:
- data/localizations/values/{{language}}.yml
Loading