diff --git a/CHANGELOG.md b/CHANGELOG.md index a8781390b..e453a2ae8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ This project adheres to [Semantic Versioning](http://semver.org). This document is formatted according to the principles of [Keep A CHANGELOG](http://keepachangelog.com). ## [Unreleased] +### Added +- (i18n) Additional Turkish (tr) keyword alternatives for and/but/then categories ## [39.1.0] - 2026-05-06 ### Added diff --git a/c/src/dialect.c b/c/src/dialect.c index 4445227af..653c34e6c 100644 --- a/c/src/dialect.c +++ b/c/src/dialect.c @@ -3243,37 +3243,37 @@ static const Dialect tlh_dialect = { &tlh_then_keywords, &tlh_when_keywords }; -static const wchar_t* const tr_and_KEYWORDS[] = { L"* ", L"Ve ", L"Hem de ", L"Bir de ", L"Ayrıca ", L"İlaveten ", L"Buna ek olarak " }; -static const Keywords tr_and_keywords = { 7, tr_and_KEYWORDS }; +static const wchar_t* const tr_and_KEYWORDS[] = { L"* ", L"Ve ", L"Aynı zamanda ", L"Ayrıca ", L"Hem de ", L"Bir de ", L"İlaveten ", L"Buna ek olarak " }; +static const Keywords tr_and_keywords = { 8, tr_and_KEYWORDS }; -static const wchar_t* const tr_background_KEYWORDS[] = { L"Geçmiş", L"Arka Plan", L"Ön Koşul", L"Önkoşul", L"Önceki Durum", L"Giriş", L"Mukaddime", L"Mevcut Durum" }; +static const wchar_t* const tr_background_KEYWORDS[] = { L"Ön Koşul", L"Önkoşul", L"Arka Plan", L"Mevcut Durum", L"Önceki Durum", L"Giriş", L"Geçmiş", L"Mukaddime" }; static const Keywords tr_background_keywords = { 8, tr_background_KEYWORDS }; -static const wchar_t* const tr_but_KEYWORDS[] = { L"* ", L"Fakat ", L"Ama ", L"Ancak ", L"Yalnız ", L"Lakin ", L"Meğer ki ", L"Buna mukabil ", L"Aksi halde " }; -static const Keywords tr_but_keywords = { 9, tr_but_KEYWORDS }; +static const wchar_t* const tr_but_KEYWORDS[] = { L"* ", L"Ancak ", L"Ama ", L"Fakat ", L"Yalnız ", L"Buna rağmen ", L"Gelgelelim ", L"Lakin ", L"Aksi halde ", L"Ne var ki ", L"Meğer ki ", L"Buna mukabil " }; +static const Keywords tr_but_keywords = { 12, tr_but_KEYWORDS }; static const wchar_t* const tr_examples_KEYWORDS[] = { L"Örnekler", L"Değerler" }; static const Keywords tr_examples_keywords = { 2, tr_examples_KEYWORDS }; -static const wchar_t* const tr_feature_KEYWORDS[] = { L"Özellik", L"İş Gereksinimi", L"Gereksinim", L"İşlev", L"Kullanıcı Hikayesi", L"Yetenek", L"Teknik Gereksinim" }; +static const wchar_t* const tr_feature_KEYWORDS[] = { L"Özellik", L"Gereksinim", L"İş Gereksinimi", L"İşlev", L"Kullanıcı Hikayesi", L"Yetenek", L"Teknik Gereksinim" }; static const Keywords tr_feature_keywords = { 7, tr_feature_KEYWORDS }; -static const wchar_t* const tr_given_KEYWORDS[] = { L"* ", L"Mevcut ", L"Önceden ", L"Geçmişte ", L"Daha önce ", L"Halihazırda ", L"Zaten ", L"Sistemde ", L"Diyelim ki ", L"Varsayalım ki ", L"Farz edelim ki ", L"Kabul edelim ki ", L"Başlangıçta ", L"Varsayılan olarak ", L"Biliniyor ki " }; +static const wchar_t* const tr_given_KEYWORDS[] = { L"* ", L"Mevcut ", L"Sistemde ", L"Zaten ", L"Halihazırda ", L"Önceden ", L"Daha önce ", L"Başlangıçta ", L"Geçmişte ", L"Biliniyor ki ", L"Varsayılan olarak ", L"Diyelim ki ", L"Varsayalım ki ", L"Farz edelim ki ", L"Kabul edelim ki " }; static const Keywords tr_given_keywords = { 15, tr_given_KEYWORDS }; -static const wchar_t* const tr_rule_KEYWORDS[] = { L"Kural", L"İş Kuralı", L"Kaide", L"Hüküm", L"Madde" }; +static const wchar_t* const tr_rule_KEYWORDS[] = { L"Kural", L"İş Kuralı", L"Madde", L"Kaide", L"Hüküm" }; static const Keywords tr_rule_keywords = { 5, tr_rule_KEYWORDS }; -static const wchar_t* const tr_scenario_KEYWORDS[] = { L"Örnek", L"Senaryo", L"Durum", L"Vaka" }; +static const wchar_t* const tr_scenario_KEYWORDS[] = { L"Senaryo", L"Örnek", L"Durum", L"Vaka" }; static const Keywords tr_scenario_keywords = { 4, tr_scenario_KEYWORDS }; static const wchar_t* const tr_scenarioOutline_KEYWORDS[] = { L"Senaryo taslağı", L"Senaryo şablonu" }; static const Keywords tr_scenarioOutline_keywords = { 2, tr_scenarioOutline_KEYWORDS }; -static const wchar_t* const tr_then_KEYWORDS[] = { L"* ", L"Beklenen ", L"O zaman ", L"Sonuç olarak ", L"Böylece ", L"Bunun üzerine ", L"Bu durumda ", L"O takdirde ", L"Şu halde ", L"Netice itibariyle ", L"Buna binaen " }; -static const Keywords tr_then_keywords = { 11, tr_then_KEYWORDS }; +static const wchar_t* const tr_then_KEYWORDS[] = { L"* ", L"Beklenen ", L"Gereken ", L"Gerekli ", L"Sonuç olarak ", L"Sonuçta ", L"Dolayısıyla ", L"Haliyle ", L"Böylece ", L"O zaman ", L"O takdirde ", L"Şu halde ", L"Bu durumda ", L"Bunun üzerine ", L"Netice itibariyle ", L"Buna binaen ", L"Bunun ardından " }; +static const Keywords tr_then_keywords = { 17, tr_then_KEYWORDS }; -static const wchar_t* const tr_when_KEYWORDS[] = { L"* ", L"Eğer ", L"Eğer ki ", L"Ne zaman ", L"Ne zaman ki ", L"Şayet " }; +static const wchar_t* const tr_when_KEYWORDS[] = { L"* ", L"Ne zaman ", L"Eğer ", L"Ne zaman ki ", L"Eğer ki ", L"Şayet " }; static const Keywords tr_when_keywords = { 6, tr_when_KEYWORDS }; static const Dialect tr_dialect = { diff --git a/cpp/src/lib/gherkin/cucumber/gherkin/dialect.cpp b/cpp/src/lib/gherkin/cucumber/gherkin/dialect.cpp index 4f2da0903..cd4152adc 100644 --- a/cpp/src/lib/gherkin/cucumber/gherkin/dialect.cpp +++ b/cpp/src/lib/gherkin/cucumber/gherkin/dialect.cpp @@ -15,7 +15,7 @@ all_keywords() { "examples", { "Voorbeelde" } }, { "feature", { "Funksie", "Besigheid Behoefte", "Vermoë" } }, { "given", { "* ", "Gegewe " } }, - { "rule", { "Regel" } }, + { "rule", { "Reël", "Reel" } }, { "scenario", { "Voorbeeld", "Situasie" } }, { "scenarioOutline", { "Situasie Uiteensetting" } }, { "then", { "* ", "Dan " } }, @@ -735,7 +735,7 @@ all_keywords() { "examples", { "예" } }, { "feature", { "기능" } }, { "given", { "* ", "조건 ", "먼저 " } }, - { "rule", { "Rule" } }, + { "rule", { "규칙" } }, { "scenario", { "시나리오" } }, { "scenarioOutline", { "시나리오 개요" } }, { "then", { "* ", "그러면 " } }, @@ -956,7 +956,7 @@ all_keywords() { "and", { "* ", "И ", "К тому же ", "Также " } }, { "background", { "Предыстория", "Контекст" } }, { "but", { "* ", "Но ", "А ", "Иначе " } }, - { "examples", { "Примеры" } }, + { "examples", { "Примеры", "Значения" } }, { "feature", { "Функция", "Функциональность", "Функционал", "Свойство", "Фича" } }, { "given", { "* ", "Допустим ", "Дано ", "Пусть " } }, { "rule", { "Правило" } }, @@ -1113,17 +1113,17 @@ all_keywords() { "tr", { - { "and", { "* ", "Ve " } }, - { "background", { "Geçmiş" } }, - { "but", { "* ", "Fakat ", "Ama " } }, - { "examples", { "Örnekler" } }, - { "feature", { "Özellik" } }, - { "given", { "* ", "Diyelim ki " } }, - { "rule", { "Kural" } }, - { "scenario", { "Örnek", "Senaryo" } }, - { "scenarioOutline", { "Senaryo taslağı" } }, - { "then", { "* ", "O zaman " } }, - { "when", { "* ", "Eğer ki " } } + { "and", { "* ", "Ve ", "Aynı zamanda ", "Ayrıca ", "Hem de ", "Bir de ", "İlaveten ", "Buna ek olarak " } }, + { "background", { "Ön Koşul", "Önkoşul", "Arka Plan", "Mevcut Durum", "Önceki Durum", "Giriş", "Geçmiş", "Mukaddime" } }, + { "but", { "* ", "Ancak ", "Ama ", "Fakat ", "Yalnız ", "Buna rağmen ", "Gelgelelim ", "Lakin ", "Aksi halde ", "Ne var ki ", "Meğer ki ", "Buna mukabil " } }, + { "examples", { "Örnekler", "Değerler" } }, + { "feature", { "Özellik", "Gereksinim", "İş Gereksinimi", "İşlev", "Kullanıcı Hikayesi", "Yetenek", "Teknik Gereksinim" } }, + { "given", { "* ", "Mevcut ", "Sistemde ", "Zaten ", "Halihazırda ", "Önceden ", "Daha önce ", "Başlangıçta ", "Geçmişte ", "Biliniyor ki ", "Varsayılan olarak ", "Diyelim ki ", "Varsayalım ki ", "Farz edelim ki ", "Kabul edelim ki " } }, + { "rule", { "Kural", "İş Kuralı", "Madde", "Kaide", "Hüküm" } }, + { "scenario", { "Senaryo", "Örnek", "Durum", "Vaka" } }, + { "scenarioOutline", { "Senaryo taslağı", "Senaryo şablonu" } }, + { "then", { "* ", "Beklenen ", "Gereken ", "Gerekli ", "Sonuç olarak ", "Sonuçta ", "Dolayısıyla ", "Haliyle ", "Böylece ", "O zaman ", "O takdirde ", "Şu halde ", "Bu durumda ", "Bunun üzerine ", "Netice itibariyle ", "Buna binaen ", "Bunun ardından " } }, + { "when", { "* ", "Ne zaman ", "Eğer ", "Ne zaman ki ", "Eğer ki ", "Şayet " } } } }, { diff --git a/dart/assets/gherkin-languages.json b/dart/assets/gherkin-languages.json index 2e4c3a282..ff507bd70 100644 --- a/dart/assets/gherkin-languages.json +++ b/dart/assets/gherkin-languages.json @@ -3324,32 +3324,36 @@ "and": [ "* ", "Ve ", + "Aynı zamanda ", + "Ayrıca ", "Hem de ", "Bir de ", - "Ayrıca ", "İlaveten ", "Buna ek olarak " ], "background": [ - "Geçmiş", - "Arka Plan", "Ön Koşul", "Önkoşul", + "Arka Plan", + "Mevcut Durum", "Önceki Durum", "Giriş", - "Mukaddime", - "Mevcut Durum" + "Geçmiş", + "Mukaddime" ], "but": [ "* ", - "Fakat ", - "Ama ", "Ancak ", + "Ama ", + "Fakat ", "Yalnız ", + "Buna rağmen ", + "Gelgelelim ", "Lakin ", + "Aksi halde ", + "Ne var ki ", "Meğer ki ", - "Buna mukabil ", - "Aksi halde " + "Buna mukabil " ], "examples": [ "Örnekler", @@ -3357,8 +3361,8 @@ ], "feature": [ "Özellik", - "İş Gereksinimi", "Gereksinim", + "İş Gereksinimi", "İşlev", "Kullanıcı Hikayesi", "Yetenek", @@ -3367,32 +3371,32 @@ "given": [ "* ", "Mevcut ", + "Sistemde ", + "Zaten ", + "Halihazırda ", "Önceden ", - "Geçmişte ", "Daha önce ", - "Halihazırda ", - "Zaten ", - "Sistemde ", + "Başlangıçta ", + "Geçmişte ", + "Biliniyor ki ", + "Varsayılan olarak ", "Diyelim ki ", "Varsayalım ki ", "Farz edelim ki ", - "Kabul edelim ki ", - "Başlangıçta ", - "Varsayılan olarak ", - "Biliniyor ki " + "Kabul edelim ki " ], "name": "Turkish", "native": "Türkçe", "rule": [ "Kural", "İş Kuralı", + "Madde", "Kaide", - "Hüküm", - "Madde" + "Hüküm" ], "scenario": [ - "Örnek", "Senaryo", + "Örnek", "Durum", "Vaka" ], @@ -3403,22 +3407,28 @@ "then": [ "* ", "Beklenen ", - "O zaman ", + "Gereken ", + "Gerekli ", "Sonuç olarak ", + "Sonuçta ", + "Dolayısıyla ", + "Haliyle ", "Böylece ", - "Bunun üzerine ", - "Bu durumda ", + "O zaman ", "O takdirde ", "Şu halde ", + "Bu durumda ", + "Bunun üzerine ", "Netice itibariyle ", - "Buna binaen " + "Buna binaen ", + "Bunun ardından " ], "when": [ "* ", - "Eğer ", - "Eğer ki ", "Ne zaman ", + "Eğer ", "Ne zaman ki ", + "Eğer ki ", "Şayet " ] }, diff --git a/elixir/priv/gherkin_languages.json b/elixir/priv/gherkin_languages.json index 2e4c3a282..ff507bd70 100644 --- a/elixir/priv/gherkin_languages.json +++ b/elixir/priv/gherkin_languages.json @@ -3324,32 +3324,36 @@ "and": [ "* ", "Ve ", + "Aynı zamanda ", + "Ayrıca ", "Hem de ", "Bir de ", - "Ayrıca ", "İlaveten ", "Buna ek olarak " ], "background": [ - "Geçmiş", - "Arka Plan", "Ön Koşul", "Önkoşul", + "Arka Plan", + "Mevcut Durum", "Önceki Durum", "Giriş", - "Mukaddime", - "Mevcut Durum" + "Geçmiş", + "Mukaddime" ], "but": [ "* ", - "Fakat ", - "Ama ", "Ancak ", + "Ama ", + "Fakat ", "Yalnız ", + "Buna rağmen ", + "Gelgelelim ", "Lakin ", + "Aksi halde ", + "Ne var ki ", "Meğer ki ", - "Buna mukabil ", - "Aksi halde " + "Buna mukabil " ], "examples": [ "Örnekler", @@ -3357,8 +3361,8 @@ ], "feature": [ "Özellik", - "İş Gereksinimi", "Gereksinim", + "İş Gereksinimi", "İşlev", "Kullanıcı Hikayesi", "Yetenek", @@ -3367,32 +3371,32 @@ "given": [ "* ", "Mevcut ", + "Sistemde ", + "Zaten ", + "Halihazırda ", "Önceden ", - "Geçmişte ", "Daha önce ", - "Halihazırda ", - "Zaten ", - "Sistemde ", + "Başlangıçta ", + "Geçmişte ", + "Biliniyor ki ", + "Varsayılan olarak ", "Diyelim ki ", "Varsayalım ki ", "Farz edelim ki ", - "Kabul edelim ki ", - "Başlangıçta ", - "Varsayılan olarak ", - "Biliniyor ki " + "Kabul edelim ki " ], "name": "Turkish", "native": "Türkçe", "rule": [ "Kural", "İş Kuralı", + "Madde", "Kaide", - "Hüküm", - "Madde" + "Hüküm" ], "scenario": [ - "Örnek", "Senaryo", + "Örnek", "Durum", "Vaka" ], @@ -3403,22 +3407,28 @@ "then": [ "* ", "Beklenen ", - "O zaman ", + "Gereken ", + "Gerekli ", "Sonuç olarak ", + "Sonuçta ", + "Dolayısıyla ", + "Haliyle ", "Böylece ", - "Bunun üzerine ", - "Bu durumda ", + "O zaman ", "O takdirde ", "Şu halde ", + "Bu durumda ", + "Bunun üzerine ", "Netice itibariyle ", - "Buna binaen " + "Buna binaen ", + "Bunun ardından " ], "when": [ "* ", - "Eğer ", - "Eğer ki ", "Ne zaman ", + "Eğer ", "Ne zaman ki ", + "Eğer ki ", "Şayet " ] }, diff --git a/gherkin-languages.json b/gherkin-languages.json index 2e4c3a282..ff507bd70 100644 --- a/gherkin-languages.json +++ b/gherkin-languages.json @@ -3324,32 +3324,36 @@ "and": [ "* ", "Ve ", + "Aynı zamanda ", + "Ayrıca ", "Hem de ", "Bir de ", - "Ayrıca ", "İlaveten ", "Buna ek olarak " ], "background": [ - "Geçmiş", - "Arka Plan", "Ön Koşul", "Önkoşul", + "Arka Plan", + "Mevcut Durum", "Önceki Durum", "Giriş", - "Mukaddime", - "Mevcut Durum" + "Geçmiş", + "Mukaddime" ], "but": [ "* ", - "Fakat ", - "Ama ", "Ancak ", + "Ama ", + "Fakat ", "Yalnız ", + "Buna rağmen ", + "Gelgelelim ", "Lakin ", + "Aksi halde ", + "Ne var ki ", "Meğer ki ", - "Buna mukabil ", - "Aksi halde " + "Buna mukabil " ], "examples": [ "Örnekler", @@ -3357,8 +3361,8 @@ ], "feature": [ "Özellik", - "İş Gereksinimi", "Gereksinim", + "İş Gereksinimi", "İşlev", "Kullanıcı Hikayesi", "Yetenek", @@ -3367,32 +3371,32 @@ "given": [ "* ", "Mevcut ", + "Sistemde ", + "Zaten ", + "Halihazırda ", "Önceden ", - "Geçmişte ", "Daha önce ", - "Halihazırda ", - "Zaten ", - "Sistemde ", + "Başlangıçta ", + "Geçmişte ", + "Biliniyor ki ", + "Varsayılan olarak ", "Diyelim ki ", "Varsayalım ki ", "Farz edelim ki ", - "Kabul edelim ki ", - "Başlangıçta ", - "Varsayılan olarak ", - "Biliniyor ki " + "Kabul edelim ki " ], "name": "Turkish", "native": "Türkçe", "rule": [ "Kural", "İş Kuralı", + "Madde", "Kaide", - "Hüküm", - "Madde" + "Hüküm" ], "scenario": [ - "Örnek", "Senaryo", + "Örnek", "Durum", "Vaka" ], @@ -3403,22 +3407,28 @@ "then": [ "* ", "Beklenen ", - "O zaman ", + "Gereken ", + "Gerekli ", "Sonuç olarak ", + "Sonuçta ", + "Dolayısıyla ", + "Haliyle ", "Böylece ", - "Bunun üzerine ", - "Bu durumda ", + "O zaman ", "O takdirde ", "Şu halde ", + "Bu durumda ", + "Bunun üzerine ", "Netice itibariyle ", - "Buna binaen " + "Buna binaen ", + "Bunun ardından " ], "when": [ "* ", - "Eğer ", - "Eğer ki ", "Ne zaman ", + "Eğer ", "Ne zaman ki ", + "Eğer ki ", "Şayet " ] }, diff --git a/go/dialects_builtin.go b/go/dialects_builtin.go index 370eb8285..dd7e241ad 100644 --- a/go/dialects_builtin.go +++ b/go/dialects_builtin.go @@ -4870,8 +4870,8 @@ var builtinDialects = gherkinDialectMap{ Keywords: map[string][]string{ feature: { "Özellik", - "İş Gereksinimi", "Gereksinim", + "İş Gereksinimi", "İşlev", "Kullanıcı Hikayesi", "Yetenek", @@ -4880,23 +4880,23 @@ var builtinDialects = gherkinDialectMap{ rule: { "Kural", "İş Kuralı", + "Madde", "Kaide", "Hüküm", - "Madde", }, background: { - "Geçmiş", - "Arka Plan", "Ön Koşul", "Önkoşul", + "Arka Plan", + "Mevcut Durum", "Önceki Durum", "Giriş", + "Geçmiş", "Mukaddime", - "Mevcut Durum", }, scenario: { - "Örnek", "Senaryo", + "Örnek", "Durum", "Vaka", }, @@ -4911,76 +4911,92 @@ var builtinDialects = gherkinDialectMap{ given: { "* ", "Mevcut ", + "Sistemde ", + "Zaten ", + "Halihazırda ", "Önceden ", - "Geçmişte ", "Daha önce ", - "Halihazırda ", - "Zaten ", - "Sistemde ", + "Başlangıçta ", + "Geçmişte ", + "Biliniyor ki ", + "Varsayılan olarak ", "Diyelim ki ", "Varsayalım ki ", "Farz edelim ki ", "Kabul edelim ki ", - "Başlangıçta ", - "Varsayılan olarak ", - "Biliniyor ki ", }, when: { "* ", - "Eğer ", - "Eğer ki ", "Ne zaman ", + "Eğer ", "Ne zaman ki ", + "Eğer ki ", "Şayet ", }, then: { "* ", "Beklenen ", - "O zaman ", + "Gereken ", + "Gerekli ", "Sonuç olarak ", + "Sonuçta ", + "Dolayısıyla ", + "Haliyle ", "Böylece ", - "Bunun üzerine ", - "Bu durumda ", + "O zaman ", "O takdirde ", "Şu halde ", + "Bu durumda ", + "Bunun üzerine ", "Netice itibariyle ", "Buna binaen ", + "Bunun ardından ", }, and: { "* ", "Ve ", + "Aynı zamanda ", + "Ayrıca ", "Hem de ", "Bir de ", - "Ayrıca ", "İlaveten ", "Buna ek olarak ", }, but: { "* ", - "Fakat ", - "Ama ", "Ancak ", + "Ama ", + "Fakat ", "Yalnız ", + "Buna rağmen ", + "Gelgelelim ", "Lakin ", + "Aksi halde ", + "Ne var ki ", "Meğer ki ", "Buna mukabil ", - "Aksi halde ", }, }, KeywordTypes: map[string]messages.StepKeywordType{ "Mevcut ": messages.StepKeywordType_CONTEXT, - "Önceden ": messages.StepKeywordType_CONTEXT, + "Sistemde ": messages.StepKeywordType_CONTEXT, - "Geçmişte ": messages.StepKeywordType_CONTEXT, + "Zaten ": messages.StepKeywordType_CONTEXT, + + "Halihazırda ": messages.StepKeywordType_CONTEXT, + + "Önceden ": messages.StepKeywordType_CONTEXT, "Daha önce ": messages.StepKeywordType_CONTEXT, - "Halihazırda ": messages.StepKeywordType_CONTEXT, + "Başlangıçta ": messages.StepKeywordType_CONTEXT, - "Zaten ": messages.StepKeywordType_CONTEXT, + "Geçmişte ": messages.StepKeywordType_CONTEXT, - "Sistemde ": messages.StepKeywordType_CONTEXT, + "Biliniyor ki ": messages.StepKeywordType_CONTEXT, + + "Varsayılan olarak ": messages.StepKeywordType_CONTEXT, "Diyelim ki ": messages.StepKeywordType_CONTEXT, @@ -4990,70 +5006,84 @@ var builtinDialects = gherkinDialectMap{ "Kabul edelim ki ": messages.StepKeywordType_CONTEXT, - "Başlangıçta ": messages.StepKeywordType_CONTEXT, - - "Varsayılan olarak ": messages.StepKeywordType_CONTEXT, - - "Biliniyor ki ": messages.StepKeywordType_CONTEXT, + "Ne zaman ": messages.StepKeywordType_ACTION, "Eğer ": messages.StepKeywordType_ACTION, - "Eğer ki ": messages.StepKeywordType_ACTION, - - "Ne zaman ": messages.StepKeywordType_ACTION, - "Ne zaman ki ": messages.StepKeywordType_ACTION, + "Eğer ki ": messages.StepKeywordType_ACTION, + "Şayet ": messages.StepKeywordType_ACTION, "Beklenen ": messages.StepKeywordType_OUTCOME, - "O zaman ": messages.StepKeywordType_OUTCOME, + "Gereken ": messages.StepKeywordType_OUTCOME, + + "Gerekli ": messages.StepKeywordType_OUTCOME, "Sonuç olarak ": messages.StepKeywordType_OUTCOME, - "Böylece ": messages.StepKeywordType_OUTCOME, + "Sonuçta ": messages.StepKeywordType_OUTCOME, - "Bunun üzerine ": messages.StepKeywordType_OUTCOME, + "Dolayısıyla ": messages.StepKeywordType_OUTCOME, - "Bu durumda ": messages.StepKeywordType_OUTCOME, + "Haliyle ": messages.StepKeywordType_OUTCOME, + + "Böylece ": messages.StepKeywordType_OUTCOME, + + "O zaman ": messages.StepKeywordType_OUTCOME, "O takdirde ": messages.StepKeywordType_OUTCOME, "Şu halde ": messages.StepKeywordType_OUTCOME, + "Bu durumda ": messages.StepKeywordType_OUTCOME, + + "Bunun üzerine ": messages.StepKeywordType_OUTCOME, + "Netice itibariyle ": messages.StepKeywordType_OUTCOME, "Buna binaen ": messages.StepKeywordType_OUTCOME, + "Bunun ardından ": messages.StepKeywordType_OUTCOME, + "Ve ": messages.StepKeywordType_CONJUNCTION, + "Aynı zamanda ": messages.StepKeywordType_CONJUNCTION, + + "Ayrıca ": messages.StepKeywordType_CONJUNCTION, + "Hem de ": messages.StepKeywordType_CONJUNCTION, "Bir de ": messages.StepKeywordType_CONJUNCTION, - "Ayrıca ": messages.StepKeywordType_CONJUNCTION, - "İlaveten ": messages.StepKeywordType_CONJUNCTION, "Buna ek olarak ": messages.StepKeywordType_CONJUNCTION, - "Fakat ": messages.StepKeywordType_CONJUNCTION, + "Ancak ": messages.StepKeywordType_CONJUNCTION, "Ama ": messages.StepKeywordType_CONJUNCTION, - "Ancak ": messages.StepKeywordType_CONJUNCTION, + "Fakat ": messages.StepKeywordType_CONJUNCTION, "Yalnız ": messages.StepKeywordType_CONJUNCTION, + "Buna rağmen ": messages.StepKeywordType_CONJUNCTION, + + "Gelgelelim ": messages.StepKeywordType_CONJUNCTION, + "Lakin ": messages.StepKeywordType_CONJUNCTION, + "Aksi halde ": messages.StepKeywordType_CONJUNCTION, + + "Ne var ki ": messages.StepKeywordType_CONJUNCTION, + "Meğer ki ": messages.StepKeywordType_CONJUNCTION, "Buna mukabil ": messages.StepKeywordType_CONJUNCTION, - "Aksi halde ": messages.StepKeywordType_CONJUNCTION, - "* ": messages.StepKeywordType_UNKNOWN, }, }, diff --git a/javascript/src/gherkin-languages.json b/javascript/src/gherkin-languages.json index 2e4c3a282..ff507bd70 100644 --- a/javascript/src/gherkin-languages.json +++ b/javascript/src/gherkin-languages.json @@ -3324,32 +3324,36 @@ "and": [ "* ", "Ve ", + "Aynı zamanda ", + "Ayrıca ", "Hem de ", "Bir de ", - "Ayrıca ", "İlaveten ", "Buna ek olarak " ], "background": [ - "Geçmiş", - "Arka Plan", "Ön Koşul", "Önkoşul", + "Arka Plan", + "Mevcut Durum", "Önceki Durum", "Giriş", - "Mukaddime", - "Mevcut Durum" + "Geçmiş", + "Mukaddime" ], "but": [ "* ", - "Fakat ", - "Ama ", "Ancak ", + "Ama ", + "Fakat ", "Yalnız ", + "Buna rağmen ", + "Gelgelelim ", "Lakin ", + "Aksi halde ", + "Ne var ki ", "Meğer ki ", - "Buna mukabil ", - "Aksi halde " + "Buna mukabil " ], "examples": [ "Örnekler", @@ -3357,8 +3361,8 @@ ], "feature": [ "Özellik", - "İş Gereksinimi", "Gereksinim", + "İş Gereksinimi", "İşlev", "Kullanıcı Hikayesi", "Yetenek", @@ -3367,32 +3371,32 @@ "given": [ "* ", "Mevcut ", + "Sistemde ", + "Zaten ", + "Halihazırda ", "Önceden ", - "Geçmişte ", "Daha önce ", - "Halihazırda ", - "Zaten ", - "Sistemde ", + "Başlangıçta ", + "Geçmişte ", + "Biliniyor ki ", + "Varsayılan olarak ", "Diyelim ki ", "Varsayalım ki ", "Farz edelim ki ", - "Kabul edelim ki ", - "Başlangıçta ", - "Varsayılan olarak ", - "Biliniyor ki " + "Kabul edelim ki " ], "name": "Turkish", "native": "Türkçe", "rule": [ "Kural", "İş Kuralı", + "Madde", "Kaide", - "Hüküm", - "Madde" + "Hüküm" ], "scenario": [ - "Örnek", "Senaryo", + "Örnek", "Durum", "Vaka" ], @@ -3403,22 +3407,28 @@ "then": [ "* ", "Beklenen ", - "O zaman ", + "Gereken ", + "Gerekli ", "Sonuç olarak ", + "Sonuçta ", + "Dolayısıyla ", + "Haliyle ", "Böylece ", - "Bunun üzerine ", - "Bu durumda ", + "O zaman ", "O takdirde ", "Şu halde ", + "Bu durumda ", + "Bunun üzerine ", "Netice itibariyle ", - "Buna binaen " + "Buna binaen ", + "Bunun ardından " ], "when": [ "* ", - "Eğer ", - "Eğer ki ", "Ne zaman ", + "Eğer ", "Ne zaman ki ", + "Eğer ki ", "Şayet " ] }, diff --git a/php/resources/gherkin-languages.json b/php/resources/gherkin-languages.json index 2e4c3a282..ff507bd70 100644 --- a/php/resources/gherkin-languages.json +++ b/php/resources/gherkin-languages.json @@ -3324,32 +3324,36 @@ "and": [ "* ", "Ve ", + "Aynı zamanda ", + "Ayrıca ", "Hem de ", "Bir de ", - "Ayrıca ", "İlaveten ", "Buna ek olarak " ], "background": [ - "Geçmiş", - "Arka Plan", "Ön Koşul", "Önkoşul", + "Arka Plan", + "Mevcut Durum", "Önceki Durum", "Giriş", - "Mukaddime", - "Mevcut Durum" + "Geçmiş", + "Mukaddime" ], "but": [ "* ", - "Fakat ", - "Ama ", "Ancak ", + "Ama ", + "Fakat ", "Yalnız ", + "Buna rağmen ", + "Gelgelelim ", "Lakin ", + "Aksi halde ", + "Ne var ki ", "Meğer ki ", - "Buna mukabil ", - "Aksi halde " + "Buna mukabil " ], "examples": [ "Örnekler", @@ -3357,8 +3361,8 @@ ], "feature": [ "Özellik", - "İş Gereksinimi", "Gereksinim", + "İş Gereksinimi", "İşlev", "Kullanıcı Hikayesi", "Yetenek", @@ -3367,32 +3371,32 @@ "given": [ "* ", "Mevcut ", + "Sistemde ", + "Zaten ", + "Halihazırda ", "Önceden ", - "Geçmişte ", "Daha önce ", - "Halihazırda ", - "Zaten ", - "Sistemde ", + "Başlangıçta ", + "Geçmişte ", + "Biliniyor ki ", + "Varsayılan olarak ", "Diyelim ki ", "Varsayalım ki ", "Farz edelim ki ", - "Kabul edelim ki ", - "Başlangıçta ", - "Varsayılan olarak ", - "Biliniyor ki " + "Kabul edelim ki " ], "name": "Turkish", "native": "Türkçe", "rule": [ "Kural", "İş Kuralı", + "Madde", "Kaide", - "Hüküm", - "Madde" + "Hüküm" ], "scenario": [ - "Örnek", "Senaryo", + "Örnek", "Durum", "Vaka" ], @@ -3403,22 +3407,28 @@ "then": [ "* ", "Beklenen ", - "O zaman ", + "Gereken ", + "Gerekli ", "Sonuç olarak ", + "Sonuçta ", + "Dolayısıyla ", + "Haliyle ", "Böylece ", - "Bunun üzerine ", - "Bu durumda ", + "O zaman ", "O takdirde ", "Şu halde ", + "Bu durumda ", + "Bunun üzerine ", "Netice itibariyle ", - "Buna binaen " + "Buna binaen ", + "Bunun ardından " ], "when": [ "* ", - "Eğer ", - "Eğer ki ", "Ne zaman ", + "Eğer ", "Ne zaman ki ", + "Eğer ki ", "Şayet " ] }, diff --git a/python/src/gherkin/gherkin-languages.json b/python/src/gherkin/gherkin-languages.json index 2e4c3a282..ff507bd70 100644 --- a/python/src/gherkin/gherkin-languages.json +++ b/python/src/gherkin/gherkin-languages.json @@ -3324,32 +3324,36 @@ "and": [ "* ", "Ve ", + "Aynı zamanda ", + "Ayrıca ", "Hem de ", "Bir de ", - "Ayrıca ", "İlaveten ", "Buna ek olarak " ], "background": [ - "Geçmiş", - "Arka Plan", "Ön Koşul", "Önkoşul", + "Arka Plan", + "Mevcut Durum", "Önceki Durum", "Giriş", - "Mukaddime", - "Mevcut Durum" + "Geçmiş", + "Mukaddime" ], "but": [ "* ", - "Fakat ", - "Ama ", "Ancak ", + "Ama ", + "Fakat ", "Yalnız ", + "Buna rağmen ", + "Gelgelelim ", "Lakin ", + "Aksi halde ", + "Ne var ki ", "Meğer ki ", - "Buna mukabil ", - "Aksi halde " + "Buna mukabil " ], "examples": [ "Örnekler", @@ -3357,8 +3361,8 @@ ], "feature": [ "Özellik", - "İş Gereksinimi", "Gereksinim", + "İş Gereksinimi", "İşlev", "Kullanıcı Hikayesi", "Yetenek", @@ -3367,32 +3371,32 @@ "given": [ "* ", "Mevcut ", + "Sistemde ", + "Zaten ", + "Halihazırda ", "Önceden ", - "Geçmişte ", "Daha önce ", - "Halihazırda ", - "Zaten ", - "Sistemde ", + "Başlangıçta ", + "Geçmişte ", + "Biliniyor ki ", + "Varsayılan olarak ", "Diyelim ki ", "Varsayalım ki ", "Farz edelim ki ", - "Kabul edelim ki ", - "Başlangıçta ", - "Varsayılan olarak ", - "Biliniyor ki " + "Kabul edelim ki " ], "name": "Turkish", "native": "Türkçe", "rule": [ "Kural", "İş Kuralı", + "Madde", "Kaide", - "Hüküm", - "Madde" + "Hüküm" ], "scenario": [ - "Örnek", "Senaryo", + "Örnek", "Durum", "Vaka" ], @@ -3403,22 +3407,28 @@ "then": [ "* ", "Beklenen ", - "O zaman ", + "Gereken ", + "Gerekli ", "Sonuç olarak ", + "Sonuçta ", + "Dolayısıyla ", + "Haliyle ", "Böylece ", - "Bunun üzerine ", - "Bu durumda ", + "O zaman ", "O takdirde ", "Şu halde ", + "Bu durumda ", + "Bunun üzerine ", "Netice itibariyle ", - "Buna binaen " + "Buna binaen ", + "Bunun ardından " ], "when": [ "* ", - "Eğer ", - "Eğer ki ", "Ne zaman ", + "Eğer ", "Ne zaman ki ", + "Eğer ki ", "Şayet " ] }, diff --git a/ruby/lib/gherkin/gherkin-languages.json b/ruby/lib/gherkin/gherkin-languages.json index 2e4c3a282..ff507bd70 100644 --- a/ruby/lib/gherkin/gherkin-languages.json +++ b/ruby/lib/gherkin/gherkin-languages.json @@ -3324,32 +3324,36 @@ "and": [ "* ", "Ve ", + "Aynı zamanda ", + "Ayrıca ", "Hem de ", "Bir de ", - "Ayrıca ", "İlaveten ", "Buna ek olarak " ], "background": [ - "Geçmiş", - "Arka Plan", "Ön Koşul", "Önkoşul", + "Arka Plan", + "Mevcut Durum", "Önceki Durum", "Giriş", - "Mukaddime", - "Mevcut Durum" + "Geçmiş", + "Mukaddime" ], "but": [ "* ", - "Fakat ", - "Ama ", "Ancak ", + "Ama ", + "Fakat ", "Yalnız ", + "Buna rağmen ", + "Gelgelelim ", "Lakin ", + "Aksi halde ", + "Ne var ki ", "Meğer ki ", - "Buna mukabil ", - "Aksi halde " + "Buna mukabil " ], "examples": [ "Örnekler", @@ -3357,8 +3361,8 @@ ], "feature": [ "Özellik", - "İş Gereksinimi", "Gereksinim", + "İş Gereksinimi", "İşlev", "Kullanıcı Hikayesi", "Yetenek", @@ -3367,32 +3371,32 @@ "given": [ "* ", "Mevcut ", + "Sistemde ", + "Zaten ", + "Halihazırda ", "Önceden ", - "Geçmişte ", "Daha önce ", - "Halihazırda ", - "Zaten ", - "Sistemde ", + "Başlangıçta ", + "Geçmişte ", + "Biliniyor ki ", + "Varsayılan olarak ", "Diyelim ki ", "Varsayalım ki ", "Farz edelim ki ", - "Kabul edelim ki ", - "Başlangıçta ", - "Varsayılan olarak ", - "Biliniyor ki " + "Kabul edelim ki " ], "name": "Turkish", "native": "Türkçe", "rule": [ "Kural", "İş Kuralı", + "Madde", "Kaide", - "Hüküm", - "Madde" + "Hüküm" ], "scenario": [ - "Örnek", "Senaryo", + "Örnek", "Durum", "Vaka" ], @@ -3403,22 +3407,28 @@ "then": [ "* ", "Beklenen ", - "O zaman ", + "Gereken ", + "Gerekli ", "Sonuç olarak ", + "Sonuçta ", + "Dolayısıyla ", + "Haliyle ", "Böylece ", - "Bunun üzerine ", - "Bu durumda ", + "O zaman ", "O takdirde ", "Şu halde ", + "Bu durumda ", + "Bunun üzerine ", "Netice itibariyle ", - "Buna binaen " + "Buna binaen ", + "Bunun ardından " ], "when": [ "* ", - "Eğer ", - "Eğer ki ", "Ne zaman ", + "Eğer ", "Ne zaman ki ", + "Eğer ki ", "Şayet " ] }, diff --git a/testdata/good/i18n_tr.feature b/testdata/good/i18n_tr.feature new file mode 100644 index 000000000..5070da712 --- /dev/null +++ b/testdata/good/i18n_tr.feature @@ -0,0 +1,240 @@ +# language: tr +Özellik: E-ticaret platformu uçtan uca sipariş akışı + Bir e-ticaret mobil uygulamasının altyapı kurulumundan + ödeme tamamlanmasına kadar tüm akışını doğrular. + + # -- 1. ALTYAPI -- Sistem Ayağa Kalkma ----------- + + Kural: Konteyner ortamı hazırlığı + + Ön Koşul: + Mevcut Docker Engine çalışıyor + Sistemde docker-compose.yml dosyası tanımlı + + Senaryo: Uygulama konteynerlerinin başlatılması + Mevcut tüm konteynerler durdurulmuştur + Ne zaman docker-compose up komutu çalıştırılırsa + Beklenen veritabanı konteyneri 10 saniye içinde hazır olur + Ve API konteyneri 15 saniye içinde hazır olur + Ayrıca Redis önbellek konteyneri başlatılır + + Senaryo: Veritabanı bağlantı havuzu oluşturma + Mevcut PostgreSQL konteyneri çalışıyor + Ne zaman API servisi ilk bağlantı talebini gönderirse + Beklenen 20 bağlantılık havuz oluşturulur + Gerekli servis veritabanı sorgularını kabul etmeye başlar + + Senaryo: Servis sağlık kontrolü + Mevcut tüm konteynerler ayakta çalışıyorlar + Ne zaman yük dengeleyici sağlık kontrolü yaparsa + Gereken tüm servisler 200 OK yanıtı döner + Ancak yanıt süresi 500 milisaniyeyi aşarsa uyarı üretilir + + # -- 2. KİMLİK DOĞRULAMA -- Kayıt ve Giriş ------ + + İş Kuralı: Kullanıcı kimlik doğrulama akışı + + Senaryo: Yeni kullanıcı kaydı + Mevcut mobil uygulama açıktır + Sistemde bu e-posta adresi ile kayıtlı kullanıcı yoktur + Ne zaman kullanıcı geçerli bilgilerle kayıt formunu gönderirse + Beklenen hesap oluşturulur + Ve doğrulama e-postası gönderilir + Aynı zamanda hoş geldin bildirimi mobil cihaza iletilir + + Senaryo: E-posta doğrulama + Önceden kullanıcı kayıt olmuştur + Zaten doğrulama e-postası gönderilmiştir + Ne zaman kullanıcı e-postadaki bağlantıya tıklarsa + Beklenen hesap durumu doğrulanmış olarak güncellenir + Böylece kullanıcı alışverişe başlayabilir + + Senaryo: Mobil uygulama ile oturum açma + Mevcut kullanıcı hesabı doğrulanmıştır + Ne zaman kullanıcı doğru e-posta ve şifre ile giriş yaptıysa + Gereken JWT oturum belirteci oluşturulur + Ve oturum belirteci güvenli depolamaya kaydedilir + Bunun üzerine kullanıcı ana sayfaya yönlendirilir + + Senaryo: Üç başarısız giriş denemesi sonrası kilitleme + Mevcut kullanıcı 2 kez yanlış şifre girmiştir + Ne zaman üçüncü kez yanlış şifre girilirse + Gerekli hesap 15 dakika süreyle kilitlenir + Aynı zamanda kullanıcıya e-posta ile bilgilendirme gönderilir + + Senaryo: Biyometrik giriş + Halihazırda kullanıcı biyometrik girişi etkinleştirmiştir + Mevcut cihazda kayıtlı parmak izi vardır + Eğer kullanıcı parmak izini okutursa + Gerekli oturum açılır + Ancak biyometrik doğrulama başarısız olursa şifre ekranı gösterilir + + # -- 3. ÜRÜN -- Listeleme ve Arama --------------- + + Kural: Ürün kataloğu ve arama işlevleri + + Senaryo: Ana sayfa ürün listeleme + Mevcut kullanıcı oturum açmıştır + Sistemde 150 aktif ürün kayıtlıdır + Ne zaman kullanıcı ana sayfayı açarsa + Beklenen ilk 20 ürün listelenir + Ve her üründe ad, fiyat ve görsel gösterilir + + Senaryo: Kategoriye göre filtreleme + Mevcut kullanıcı ürün listesinde + Sistemde elektronik kategorisinde 45 ürün var + Eğer kullanıcı elektronik kategorisini seçerse + Beklenen yalnızca elektronik kategorisi ürünlerin listelenmesidir + Bu durumda sayfa başlığı elektronik olarak güncellenir + + Senaryo: Stokta olmayan ürünün görüntülenmesi + Mevcut ürün stok adedi sıfır + Eğer kullanıcı bu ürünün detay sayfasını açarsa + Beklenen ürün bilgileri görüntülenir + Ancak sepete ekle düğmesi pasif olur + Buna rağmen stok bildirimi almak için e-posta kaydı yapılabilir + + Senaryo taslağı: Fiyat aralığına göre filtreleme + Mevcut kullanıcı ürün listesinde + Ne zaman TL ile TL arasındaki fiyat filtrelerini seçerse + Beklenen yalnızca bu aralıktaki ürünlerin gösterilmesidir + + Örnekler: + | min | maks | + | 0 | 100 | + | 100 | 500 | + | 500 | 2000 | + + # -- 4. SEPET -- Ürün Ekleme ve Yönetim ---------- + + Kural: Alışveriş sepeti yönetimi + + Senaryo: Sepete ilk ürün ekleme + Mevcut sepet boş + Sistemde ürün stokta var + Ne zaman kullanıcı ürünü sepete eklerse + O zaman sepette 1 ürün görünür + Ve sepet simgesinde adet göstergesi güncellenir + Aynı zamanda sepet toplam tutarı hesaplanır + + Senaryo: Aynı üründen birden fazla ekleme + Mevcut sepette 1 adet kalem var + Sistemde bu üründen 50 adet stokta var + Şayet kullanıcı aynı ürünü tekrar sepete eklerse + Beklenen kalem adedi 2 olarak güncellenir + Dolayısıyla toplam tutar birim fiyatın 2 katı olur + Ancak sepete ayrı satır olarak eklenmez + + Senaryo: Stok sınırını aşan adet girişi + Mevcut sepette 1 adet ürün var + Sistemde bu üründen 3 adet stokta kaldı + Şayet kullanıcı adedi 5 olarak güncellemeye çalışırsa + Gerekli sistem maksimum stok uyarısı gösterir + Bu durumda adet otomatik olarak 3 ile sınırlandırılır + + Senaryo: Sepetten ürün çıkarma + Mevcut sepette 3 farklı ürün var + Eğer kullanıcı bir ürünü sepetten çıkardıysa + O zaman sepette 2 ürün kalır + Bunun üzerine toplam tutar yeniden hesaplanır + + Senaryo: Sepet zaman aşımı ve kurtarma + Daha önce kullanıcı sepete ürün eklemiştir + Halihazırda son işlemden bu yana 30 dakika geçmiştir + Ne zaman kullanıcı sepet sayfasını açarsa + Beklenen sepet içeriği korunur + Ancak fiyatlar güncel duruma göre yeniden hesaplanır + + # -- 5. ÖDEME -- Mobil Ödeme Akışı --------------- + + İş Kuralı: Mobil ödeme işleme kuralları + + Ön Koşul: + Sistemde ödeme altyapısı aktiftir + Mevcut kullanıcı oturum açmıştır + Zaten sepette en az 1 ürün vardır + + Senaryo: Teslimat adresi seçimi + Mevcut kullanıcının 2 kayıtlı adresi var + Ne zaman kullanıcı ödeme sayfasına geçerse + Beklenen kayıtlı adresler listelenir + Ve varsayılan adres seçili olarak gösterilir + + Senaryo: Kredi kartı ile başarılı ödeme + Mevcut sepet tutarı 750 TL + Önceden kullanıcı teslimat adresini seçmiştir + Ne zaman kullanıcı geçerli kredi kartı bilgilerini girip ödemeyi onaylarsa + Beklenen ödeme başarılı olarak işlenir + Gereken sipariş numarası oluşturulur + Ve sipariş onay e-postası gönderilir + Aynı zamanda mobil bildirim iletilir + Bunun ardından sepet temizlenir + + Senaryo: Yetersiz bakiye ile ödeme reddi + Mevcut sepet tutarı 2500 TL + Eğer kullanıcı yetersiz bakiyeli kart ile ödeme yapmaya çalışırsa + Beklenen sonuç ödemenin reddedilmesidir + Fakat kullanıcının sepet içeriği korunur + Ve farklı ödeme yöntemi seçeneği sunulur + + Senaryo: 3D Secure doğrulama + Mevcut sepet tutarı 1500 TL + Ne zaman kullanıcı ödemeyi onaylarsa + Gerekli 3D Secure doğrulama sayfası açılır + Ne zaman kullanıcı SMS kodunu doğru girerse + Beklenen ödeme onaylanır + Böylece sipariş oluşturulur + + Senaryo: 3D Secure zaman aşımı + Mevcut 3D Secure doğrulama sayfası açılmıştır + Halihazırda 5 dakika geçmiştir ve kod girilmemiştir + Eğer doğrulama süresi dolarsa + Beklenen işlem iptal edilir + Ancak kullanıcı ödemeyi tekrar deneyebilir + Aynı zamanda sepet içeriği ve adres bilgisi korunur + + Senaryo şablonu: Taksitli ödeme hesaplama + Mevcut sepet tutarı TL + Eğer kullanıcı taksit seçeneğini tercih ederse + Beklenen aylık taksit tutarı TL olarak gösterilir + Böylece toplam ödenecek tutar TL olarak gösterilir + + Değerler: + | tutar | taksit | aylik | toplam | + | 3000 | 3 | 1000 | 3000 | + | 3000 | 6 | 530 | 3180 | + | 3000 | 9 | 367 | 3303 | + | 3000 | 12 | 290 | 3480 | + + Senaryo: Mobil cüzdan ile hızlı ödeme + Mevcut kullanıcının mobil cüzdanı tanımlıdır + Zaten cüzdanda kayıtlı kart vardır + Ne zaman kullanıcı tek dokunuşla öde seçeneğini kullanırsa + Gerekli biyometrik doğrulama istenir + Şayet kullanıcı parmak izini onayladıysa + Gereken ödeme işlenir + Böylece sipariş anında oluşturulur + + # -- 6. SİPARİŞ SONRASI -- Kargo ve Bildirim ---- + + Kural: Sipariş sonrası süreç yönetimi + + Senaryo: Sipariş durum bildirimi + Önceden sipariş başarıyla oluşturulmuştur + Ne zaman sipariş durumu hazırlanıyor olarak güncellenirse + O zaman kullanıcıya mobil bildirim gönderilir + Ayrıca sipariş takip sayfasında durum güncellenir + + Senaryo: Kargoya teslim bildirimi + Önceden sipariş hazırlanmıştır + Ne zaman kargo firması siparişi teslim alırsa + Beklenen kargo takip numarası oluşturulur + Ve kullanıcıya takip bağlantısı bildirimi gönderilir + Bunun üzerine tahmini teslimat tarihi hesaplanır + + Senaryo: Başarılı teslimat onayı + Mevcut sipariş kargoda + Ne zaman kargo firması teslim edildi bilgisini gönderdiyse + Beklenen sipariş durumu teslim edildi olarak güncellenir + Aynı zamanda iade süresi başlangıç tarihi kaydedilir + Bunun üzerine kullanıcıya değerlendirme daveti gönderilir diff --git a/testdata/good/i18n_tr.feature.ast.ndjson b/testdata/good/i18n_tr.feature.ast.ndjson new file mode 100644 index 000000000..c758a3548 --- /dev/null +++ b/testdata/good/i18n_tr.feature.ast.ndjson @@ -0,0 +1 @@ +{"gherkinDocument":{"comments":[{"location":{"column":1,"line":6},"text":" # -- 1. ALTYAPI -- Sistem Ayağa Kalkma -----------"},{"location":{"column":1,"line":33},"text":" # -- 2. KİMLİK DOĞRULAMA -- Kayıt ve Giriş ------"},{"location":{"column":1,"line":72},"text":" # -- 3. ÜRÜN -- Listeleme ve Arama ---------------"},{"location":{"column":1,"line":108},"text":" # -- 4. SEPET -- Ürün Ekleme ve Yönetim ----------"},{"location":{"column":1,"line":148},"text":" # -- 5. ÖDEME -- Mobil Ödeme Akışı ---------------"},{"location":{"column":1,"line":218},"text":" # -- 6. SİPARİŞ SONRASI -- Kargo ve Bildirim ----"}],"feature":{"children":[{"rule":{"children":[{"background":{"description":"","id":"2","keyword":"Ön Koşul","location":{"column":5,"line":10},"name":"","steps":[{"id":"0","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":11},"text":"Docker Engine çalışıyor"},{"id":"1","keyword":"Sistemde ","keywordType":"Context","location":{"column":7,"line":12},"text":"docker-compose.yml dosyası tanımlı"}]}},{"scenario":{"description":"","examples":[],"id":"8","keyword":"Senaryo","location":{"column":5,"line":14},"name":"Uygulama konteynerlerinin başlatılması","steps":[{"id":"3","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":15},"text":"tüm konteynerler durdurulmuştur"},{"id":"4","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":16},"text":"docker-compose up komutu çalıştırılırsa"},{"id":"5","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":17},"text":"veritabanı konteyneri 10 saniye içinde hazır olur"},{"id":"6","keyword":"Ve ","keywordType":"Conjunction","location":{"column":7,"line":18},"text":"API konteyneri 15 saniye içinde hazır olur"},{"id":"7","keyword":"Ayrıca ","keywordType":"Conjunction","location":{"column":7,"line":19},"text":"Redis önbellek konteyneri başlatılır"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"13","keyword":"Senaryo","location":{"column":5,"line":21},"name":"Veritabanı bağlantı havuzu oluşturma","steps":[{"id":"9","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":22},"text":"PostgreSQL konteyneri çalışıyor"},{"id":"10","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":23},"text":"API servisi ilk bağlantı talebini gönderirse"},{"id":"11","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":24},"text":"20 bağlantılık havuz oluşturulur"},{"id":"12","keyword":"Gerekli ","keywordType":"Outcome","location":{"column":7,"line":25},"text":"servis veritabanı sorgularını kabul etmeye başlar"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"18","keyword":"Senaryo","location":{"column":5,"line":27},"name":"Servis sağlık kontrolü","steps":[{"id":"14","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":28},"text":"tüm konteynerler ayakta çalışıyorlar"},{"id":"15","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":29},"text":"yük dengeleyici sağlık kontrolü yaparsa"},{"id":"16","keyword":"Gereken ","keywordType":"Outcome","location":{"column":7,"line":30},"text":"tüm servisler 200 OK yanıtı döner"},{"id":"17","keyword":"Ancak ","keywordType":"Conjunction","location":{"column":7,"line":31},"text":"yanıt süresi 500 milisaniyeyi aşarsa uyarı üretilir"}],"tags":[]}}],"description":"","id":"19","keyword":"Kural","location":{"column":3,"line":8},"name":"Konteyner ortamı hazırlığı","tags":[]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"26","keyword":"Senaryo","location":{"column":5,"line":37},"name":"Yeni kullanıcı kaydı","steps":[{"id":"20","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":38},"text":"mobil uygulama açıktır"},{"id":"21","keyword":"Sistemde ","keywordType":"Context","location":{"column":7,"line":39},"text":"bu e-posta adresi ile kayıtlı kullanıcı yoktur"},{"id":"22","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":40},"text":"kullanıcı geçerli bilgilerle kayıt formunu gönderirse"},{"id":"23","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":41},"text":"hesap oluşturulur"},{"id":"24","keyword":"Ve ","keywordType":"Conjunction","location":{"column":7,"line":42},"text":"doğrulama e-postası gönderilir"},{"id":"25","keyword":"Aynı zamanda ","keywordType":"Conjunction","location":{"column":7,"line":43},"text":"hoş geldin bildirimi mobil cihaza iletilir"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"32","keyword":"Senaryo","location":{"column":5,"line":45},"name":"E-posta doğrulama","steps":[{"id":"27","keyword":"Önceden ","keywordType":"Context","location":{"column":7,"line":46},"text":"kullanıcı kayıt olmuştur"},{"id":"28","keyword":"Zaten ","keywordType":"Context","location":{"column":7,"line":47},"text":"doğrulama e-postası gönderilmiştir"},{"id":"29","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":48},"text":"kullanıcı e-postadaki bağlantıya tıklarsa"},{"id":"30","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":49},"text":"hesap durumu doğrulanmış olarak güncellenir"},{"id":"31","keyword":"Böylece ","keywordType":"Outcome","location":{"column":7,"line":50},"text":"kullanıcı alışverişe başlayabilir"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"38","keyword":"Senaryo","location":{"column":5,"line":52},"name":"Mobil uygulama ile oturum açma","steps":[{"id":"33","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":53},"text":"kullanıcı hesabı doğrulanmıştır"},{"id":"34","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":54},"text":"kullanıcı doğru e-posta ve şifre ile giriş yaptıysa"},{"id":"35","keyword":"Gereken ","keywordType":"Outcome","location":{"column":7,"line":55},"text":"JWT oturum belirteci oluşturulur"},{"id":"36","keyword":"Ve ","keywordType":"Conjunction","location":{"column":7,"line":56},"text":"oturum belirteci güvenli depolamaya kaydedilir"},{"id":"37","keyword":"Bunun üzerine ","keywordType":"Outcome","location":{"column":7,"line":57},"text":"kullanıcı ana sayfaya yönlendirilir"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"43","keyword":"Senaryo","location":{"column":5,"line":59},"name":"Üç başarısız giriş denemesi sonrası kilitleme","steps":[{"id":"39","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":60},"text":"kullanıcı 2 kez yanlış şifre girmiştir"},{"id":"40","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":61},"text":"üçüncü kez yanlış şifre girilirse"},{"id":"41","keyword":"Gerekli ","keywordType":"Outcome","location":{"column":7,"line":62},"text":"hesap 15 dakika süreyle kilitlenir"},{"id":"42","keyword":"Aynı zamanda ","keywordType":"Conjunction","location":{"column":7,"line":63},"text":"kullanıcıya e-posta ile bilgilendirme gönderilir"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"49","keyword":"Senaryo","location":{"column":5,"line":65},"name":"Biyometrik giriş","steps":[{"id":"44","keyword":"Halihazırda ","keywordType":"Context","location":{"column":7,"line":66},"text":"kullanıcı biyometrik girişi etkinleştirmiştir"},{"id":"45","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":67},"text":"cihazda kayıtlı parmak izi vardır"},{"id":"46","keyword":"Eğer ","keywordType":"Action","location":{"column":7,"line":68},"text":"kullanıcı parmak izini okutursa"},{"id":"47","keyword":"Gerekli ","keywordType":"Outcome","location":{"column":7,"line":69},"text":"oturum açılır"},{"id":"48","keyword":"Ancak ","keywordType":"Conjunction","location":{"column":7,"line":70},"text":"biyometrik doğrulama başarısız olursa şifre ekranı gösterilir"}],"tags":[]}}],"description":"","id":"50","keyword":"İş Kuralı","location":{"column":3,"line":35},"name":"Kullanıcı kimlik doğrulama akışı","tags":[]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"56","keyword":"Senaryo","location":{"column":5,"line":76},"name":"Ana sayfa ürün listeleme","steps":[{"id":"51","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":77},"text":"kullanıcı oturum açmıştır"},{"id":"52","keyword":"Sistemde ","keywordType":"Context","location":{"column":7,"line":78},"text":"150 aktif ürün kayıtlıdır"},{"id":"53","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":79},"text":"kullanıcı ana sayfayı açarsa"},{"id":"54","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":80},"text":"ilk 20 ürün listelenir"},{"id":"55","keyword":"Ve ","keywordType":"Conjunction","location":{"column":7,"line":81},"text":"her üründe ad, fiyat ve görsel gösterilir"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"62","keyword":"Senaryo","location":{"column":5,"line":83},"name":"Kategoriye göre filtreleme","steps":[{"id":"57","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":84},"text":"kullanıcı ürün listesinde"},{"id":"58","keyword":"Sistemde ","keywordType":"Context","location":{"column":7,"line":85},"text":"elektronik kategorisinde 45 ürün var"},{"id":"59","keyword":"Eğer ","keywordType":"Action","location":{"column":7,"line":86},"text":"kullanıcı elektronik kategorisini seçerse"},{"id":"60","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":87},"text":"yalnızca elektronik kategorisi ürünlerin listelenmesidir"},{"id":"61","keyword":"Bu durumda ","keywordType":"Outcome","location":{"column":7,"line":88},"text":"sayfa başlığı elektronik olarak güncellenir"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"68","keyword":"Senaryo","location":{"column":5,"line":90},"name":"Stokta olmayan ürünün görüntülenmesi","steps":[{"id":"63","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":91},"text":"ürün stok adedi sıfır"},{"id":"64","keyword":"Eğer ","keywordType":"Action","location":{"column":7,"line":92},"text":"kullanıcı bu ürünün detay sayfasını açarsa"},{"id":"65","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":93},"text":"ürün bilgileri görüntülenir"},{"id":"66","keyword":"Ancak ","keywordType":"Conjunction","location":{"column":7,"line":94},"text":"sepete ekle düğmesi pasif olur"},{"id":"67","keyword":"Buna rağmen ","keywordType":"Conjunction","location":{"column":7,"line":95},"text":"stok bildirimi almak için e-posta kaydı yapılabilir"}],"tags":[]}},{"scenario":{"description":"","examples":[{"description":"","id":"76","keyword":"Örnekler","location":{"column":7,"line":102},"name":"","tableBody":[{"cells":[{"location":{"column":11,"line":104},"value":"0"},{"location":{"column":18,"line":104},"value":"100"}],"id":"73","location":{"column":9,"line":104}},{"cells":[{"location":{"column":11,"line":105},"value":"100"},{"location":{"column":18,"line":105},"value":"500"}],"id":"74","location":{"column":9,"line":105}},{"cells":[{"location":{"column":11,"line":106},"value":"500"},{"location":{"column":18,"line":106},"value":"2000"}],"id":"75","location":{"column":9,"line":106}}],"tableHeader":{"cells":[{"location":{"column":11,"line":103},"value":"min"},{"location":{"column":18,"line":103},"value":"maks"}],"id":"72","location":{"column":9,"line":103}},"tags":[]}],"id":"77","keyword":"Senaryo taslağı","location":{"column":5,"line":97},"name":"Fiyat aralığına göre filtreleme","steps":[{"id":"69","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":98},"text":"kullanıcı ürün listesinde"},{"id":"70","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":99},"text":" TL ile TL arasındaki fiyat filtrelerini seçerse"},{"id":"71","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":100},"text":"yalnızca bu aralıktaki ürünlerin gösterilmesidir"}],"tags":[]}}],"description":"","id":"78","keyword":"Kural","location":{"column":3,"line":74},"name":"Ürün kataloğu ve arama işlevleri","tags":[]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"85","keyword":"Senaryo","location":{"column":5,"line":112},"name":"Sepete ilk ürün ekleme","steps":[{"id":"79","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":113},"text":"sepet boş"},{"id":"80","keyword":"Sistemde ","keywordType":"Context","location":{"column":7,"line":114},"text":"ürün stokta var"},{"id":"81","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":115},"text":"kullanıcı ürünü sepete eklerse"},{"id":"82","keyword":"O zaman ","keywordType":"Outcome","location":{"column":7,"line":116},"text":"sepette 1 ürün görünür"},{"id":"83","keyword":"Ve ","keywordType":"Conjunction","location":{"column":7,"line":117},"text":"sepet simgesinde adet göstergesi güncellenir"},{"id":"84","keyword":"Aynı zamanda ","keywordType":"Conjunction","location":{"column":7,"line":118},"text":"sepet toplam tutarı hesaplanır"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"92","keyword":"Senaryo","location":{"column":5,"line":120},"name":"Aynı üründen birden fazla ekleme","steps":[{"id":"86","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":121},"text":"sepette 1 adet kalem var"},{"id":"87","keyword":"Sistemde ","keywordType":"Context","location":{"column":7,"line":122},"text":"bu üründen 50 adet stokta var"},{"id":"88","keyword":"Şayet ","keywordType":"Action","location":{"column":7,"line":123},"text":"kullanıcı aynı ürünü tekrar sepete eklerse"},{"id":"89","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":124},"text":"kalem adedi 2 olarak güncellenir"},{"id":"90","keyword":"Dolayısıyla ","keywordType":"Outcome","location":{"column":7,"line":125},"text":"toplam tutar birim fiyatın 2 katı olur"},{"id":"91","keyword":"Ancak ","keywordType":"Conjunction","location":{"column":7,"line":126},"text":"sepete ayrı satır olarak eklenmez"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"98","keyword":"Senaryo","location":{"column":5,"line":128},"name":"Stok sınırını aşan adet girişi","steps":[{"id":"93","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":129},"text":"sepette 1 adet ürün var"},{"id":"94","keyword":"Sistemde ","keywordType":"Context","location":{"column":7,"line":130},"text":"bu üründen 3 adet stokta kaldı"},{"id":"95","keyword":"Şayet ","keywordType":"Action","location":{"column":7,"line":131},"text":"kullanıcı adedi 5 olarak güncellemeye çalışırsa"},{"id":"96","keyword":"Gerekli ","keywordType":"Outcome","location":{"column":7,"line":132},"text":"sistem maksimum stok uyarısı gösterir"},{"id":"97","keyword":"Bu durumda ","keywordType":"Outcome","location":{"column":7,"line":133},"text":"adet otomatik olarak 3 ile sınırlandırılır"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"103","keyword":"Senaryo","location":{"column":5,"line":135},"name":"Sepetten ürün çıkarma","steps":[{"id":"99","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":136},"text":"sepette 3 farklı ürün var"},{"id":"100","keyword":"Eğer ","keywordType":"Action","location":{"column":7,"line":137},"text":"kullanıcı bir ürünü sepetten çıkardıysa"},{"id":"101","keyword":"O zaman ","keywordType":"Outcome","location":{"column":7,"line":138},"text":"sepette 2 ürün kalır"},{"id":"102","keyword":"Bunun üzerine ","keywordType":"Outcome","location":{"column":7,"line":139},"text":"toplam tutar yeniden hesaplanır"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"109","keyword":"Senaryo","location":{"column":5,"line":141},"name":"Sepet zaman aşımı ve kurtarma","steps":[{"id":"104","keyword":"Daha önce ","keywordType":"Context","location":{"column":7,"line":142},"text":"kullanıcı sepete ürün eklemiştir"},{"id":"105","keyword":"Halihazırda ","keywordType":"Context","location":{"column":7,"line":143},"text":"son işlemden bu yana 30 dakika geçmiştir"},{"id":"106","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":144},"text":"kullanıcı sepet sayfasını açarsa"},{"id":"107","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":145},"text":"sepet içeriği korunur"},{"id":"108","keyword":"Ancak ","keywordType":"Conjunction","location":{"column":7,"line":146},"text":"fiyatlar güncel duruma göre yeniden hesaplanır"}],"tags":[]}}],"description":"","id":"110","keyword":"Kural","location":{"column":3,"line":110},"name":"Alışveriş sepeti yönetimi","tags":[]}},{"rule":{"children":[{"background":{"description":"","id":"114","keyword":"Ön Koşul","location":{"column":5,"line":152},"name":"","steps":[{"id":"111","keyword":"Sistemde ","keywordType":"Context","location":{"column":7,"line":153},"text":"ödeme altyapısı aktiftir"},{"id":"112","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":154},"text":"kullanıcı oturum açmıştır"},{"id":"113","keyword":"Zaten ","keywordType":"Context","location":{"column":7,"line":155},"text":"sepette en az 1 ürün vardır"}]}},{"scenario":{"description":"","examples":[],"id":"119","keyword":"Senaryo","location":{"column":5,"line":157},"name":"Teslimat adresi seçimi","steps":[{"id":"115","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":158},"text":"kullanıcının 2 kayıtlı adresi var"},{"id":"116","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":159},"text":"kullanıcı ödeme sayfasına geçerse"},{"id":"117","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":160},"text":"kayıtlı adresler listelenir"},{"id":"118","keyword":"Ve ","keywordType":"Conjunction","location":{"column":7,"line":161},"text":"varsayılan adres seçili olarak gösterilir"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"128","keyword":"Senaryo","location":{"column":5,"line":163},"name":"Kredi kartı ile başarılı ödeme","steps":[{"id":"120","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":164},"text":"sepet tutarı 750 TL"},{"id":"121","keyword":"Önceden ","keywordType":"Context","location":{"column":7,"line":165},"text":"kullanıcı teslimat adresini seçmiştir"},{"id":"122","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":166},"text":"kullanıcı geçerli kredi kartı bilgilerini girip ödemeyi onaylarsa"},{"id":"123","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":167},"text":"ödeme başarılı olarak işlenir"},{"id":"124","keyword":"Gereken ","keywordType":"Outcome","location":{"column":7,"line":168},"text":"sipariş numarası oluşturulur"},{"id":"125","keyword":"Ve ","keywordType":"Conjunction","location":{"column":7,"line":169},"text":"sipariş onay e-postası gönderilir"},{"id":"126","keyword":"Aynı zamanda ","keywordType":"Conjunction","location":{"column":7,"line":170},"text":"mobil bildirim iletilir"},{"id":"127","keyword":"Bunun ardından ","keywordType":"Outcome","location":{"column":7,"line":171},"text":"sepet temizlenir"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"134","keyword":"Senaryo","location":{"column":5,"line":173},"name":"Yetersiz bakiye ile ödeme reddi","steps":[{"id":"129","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":174},"text":"sepet tutarı 2500 TL"},{"id":"130","keyword":"Eğer ","keywordType":"Action","location":{"column":7,"line":175},"text":"kullanıcı yetersiz bakiyeli kart ile ödeme yapmaya çalışırsa"},{"id":"131","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":176},"text":"sonuç ödemenin reddedilmesidir"},{"id":"132","keyword":"Fakat ","keywordType":"Conjunction","location":{"column":7,"line":177},"text":"kullanıcının sepet içeriği korunur"},{"id":"133","keyword":"Ve ","keywordType":"Conjunction","location":{"column":7,"line":178},"text":"farklı ödeme yöntemi seçeneği sunulur"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"141","keyword":"Senaryo","location":{"column":5,"line":180},"name":"3D Secure doğrulama","steps":[{"id":"135","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":181},"text":"sepet tutarı 1500 TL"},{"id":"136","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":182},"text":"kullanıcı ödemeyi onaylarsa"},{"id":"137","keyword":"Gerekli ","keywordType":"Outcome","location":{"column":7,"line":183},"text":"3D Secure doğrulama sayfası açılır"},{"id":"138","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":184},"text":"kullanıcı SMS kodunu doğru girerse"},{"id":"139","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":185},"text":"ödeme onaylanır"},{"id":"140","keyword":"Böylece ","keywordType":"Outcome","location":{"column":7,"line":186},"text":"sipariş oluşturulur"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"148","keyword":"Senaryo","location":{"column":5,"line":188},"name":"3D Secure zaman aşımı","steps":[{"id":"142","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":189},"text":"3D Secure doğrulama sayfası açılmıştır"},{"id":"143","keyword":"Halihazırda ","keywordType":"Context","location":{"column":7,"line":190},"text":"5 dakika geçmiştir ve kod girilmemiştir"},{"id":"144","keyword":"Eğer ","keywordType":"Action","location":{"column":7,"line":191},"text":"doğrulama süresi dolarsa"},{"id":"145","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":192},"text":"işlem iptal edilir"},{"id":"146","keyword":"Ancak ","keywordType":"Conjunction","location":{"column":7,"line":193},"text":"kullanıcı ödemeyi tekrar deneyebilir"},{"id":"147","keyword":"Aynı zamanda ","keywordType":"Conjunction","location":{"column":7,"line":194},"text":"sepet içeriği ve adres bilgisi korunur"}],"tags":[]}},{"scenario":{"description":"","examples":[{"description":"","id":"158","keyword":"Değerler","location":{"column":7,"line":202},"name":"","tableBody":[{"cells":[{"location":{"column":11,"line":204},"value":"3000"},{"location":{"column":19,"line":204},"value":"3"},{"location":{"column":28,"line":204},"value":"1000"},{"location":{"column":37,"line":204},"value":"3000"}],"id":"154","location":{"column":9,"line":204}},{"cells":[{"location":{"column":11,"line":205},"value":"3000"},{"location":{"column":19,"line":205},"value":"6"},{"location":{"column":28,"line":205},"value":"530"},{"location":{"column":37,"line":205},"value":"3180"}],"id":"155","location":{"column":9,"line":205}},{"cells":[{"location":{"column":11,"line":206},"value":"3000"},{"location":{"column":19,"line":206},"value":"9"},{"location":{"column":28,"line":206},"value":"367"},{"location":{"column":37,"line":206},"value":"3303"}],"id":"156","location":{"column":9,"line":206}},{"cells":[{"location":{"column":11,"line":207},"value":"3000"},{"location":{"column":19,"line":207},"value":"12"},{"location":{"column":28,"line":207},"value":"290"},{"location":{"column":37,"line":207},"value":"3480"}],"id":"157","location":{"column":9,"line":207}}],"tableHeader":{"cells":[{"location":{"column":11,"line":203},"value":"tutar"},{"location":{"column":19,"line":203},"value":"taksit"},{"location":{"column":28,"line":203},"value":"aylik"},{"location":{"column":37,"line":203},"value":"toplam"}],"id":"153","location":{"column":9,"line":203}},"tags":[]}],"id":"159","keyword":"Senaryo şablonu","location":{"column":5,"line":196},"name":"Taksitli ödeme hesaplama","steps":[{"id":"149","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":197},"text":"sepet tutarı TL"},{"id":"150","keyword":"Eğer ","keywordType":"Action","location":{"column":7,"line":198},"text":"kullanıcı taksit seçeneğini tercih ederse"},{"id":"151","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":199},"text":"aylık taksit tutarı TL olarak gösterilir"},{"id":"152","keyword":"Böylece ","keywordType":"Outcome","location":{"column":7,"line":200},"text":"toplam ödenecek tutar TL olarak gösterilir"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"167","keyword":"Senaryo","location":{"column":5,"line":209},"name":"Mobil cüzdan ile hızlı ödeme","steps":[{"id":"160","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":210},"text":"kullanıcının mobil cüzdanı tanımlıdır"},{"id":"161","keyword":"Zaten ","keywordType":"Context","location":{"column":7,"line":211},"text":"cüzdanda kayıtlı kart vardır"},{"id":"162","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":212},"text":"kullanıcı tek dokunuşla öde seçeneğini kullanırsa"},{"id":"163","keyword":"Gerekli ","keywordType":"Outcome","location":{"column":7,"line":213},"text":"biyometrik doğrulama istenir"},{"id":"164","keyword":"Şayet ","keywordType":"Action","location":{"column":7,"line":214},"text":"kullanıcı parmak izini onayladıysa"},{"id":"165","keyword":"Gereken ","keywordType":"Outcome","location":{"column":7,"line":215},"text":"ödeme işlenir"},{"id":"166","keyword":"Böylece ","keywordType":"Outcome","location":{"column":7,"line":216},"text":"sipariş anında oluşturulur"}],"tags":[]}}],"description":"","id":"168","keyword":"İş Kuralı","location":{"column":3,"line":150},"name":"Mobil ödeme işleme kuralları","tags":[]}},{"rule":{"children":[{"scenario":{"description":"","examples":[],"id":"173","keyword":"Senaryo","location":{"column":5,"line":222},"name":"Sipariş durum bildirimi","steps":[{"id":"169","keyword":"Önceden ","keywordType":"Context","location":{"column":7,"line":223},"text":"sipariş başarıyla oluşturulmuştur"},{"id":"170","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":224},"text":"sipariş durumu hazırlanıyor olarak güncellenirse"},{"id":"171","keyword":"O zaman ","keywordType":"Outcome","location":{"column":7,"line":225},"text":"kullanıcıya mobil bildirim gönderilir"},{"id":"172","keyword":"Ayrıca ","keywordType":"Conjunction","location":{"column":7,"line":226},"text":"sipariş takip sayfasında durum güncellenir"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"179","keyword":"Senaryo","location":{"column":5,"line":228},"name":"Kargoya teslim bildirimi","steps":[{"id":"174","keyword":"Önceden ","keywordType":"Context","location":{"column":7,"line":229},"text":"sipariş hazırlanmıştır"},{"id":"175","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":230},"text":"kargo firması siparişi teslim alırsa"},{"id":"176","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":231},"text":"kargo takip numarası oluşturulur"},{"id":"177","keyword":"Ve ","keywordType":"Conjunction","location":{"column":7,"line":232},"text":"kullanıcıya takip bağlantısı bildirimi gönderilir"},{"id":"178","keyword":"Bunun üzerine ","keywordType":"Outcome","location":{"column":7,"line":233},"text":"tahmini teslimat tarihi hesaplanır"}],"tags":[]}},{"scenario":{"description":"","examples":[],"id":"185","keyword":"Senaryo","location":{"column":5,"line":235},"name":"Başarılı teslimat onayı","steps":[{"id":"180","keyword":"Mevcut ","keywordType":"Context","location":{"column":7,"line":236},"text":"sipariş kargoda"},{"id":"181","keyword":"Ne zaman ","keywordType":"Action","location":{"column":7,"line":237},"text":"kargo firması teslim edildi bilgisini gönderdiyse"},{"id":"182","keyword":"Beklenen ","keywordType":"Outcome","location":{"column":7,"line":238},"text":"sipariş durumu teslim edildi olarak güncellenir"},{"id":"183","keyword":"Aynı zamanda ","keywordType":"Conjunction","location":{"column":7,"line":239},"text":"iade süresi başlangıç tarihi kaydedilir"},{"id":"184","keyword":"Bunun üzerine ","keywordType":"Outcome","location":{"column":7,"line":240},"text":"kullanıcıya değerlendirme daveti gönderilir"}],"tags":[]}}],"description":"","id":"186","keyword":"Kural","location":{"column":3,"line":220},"name":"Sipariş sonrası süreç yönetimi","tags":[]}}],"description":" Bir e-ticaret mobil uygulamasının altyapı kurulumundan\n ödeme tamamlanmasına kadar tüm akışını doğrular.","keyword":"Özellik","language":"tr","location":{"column":1,"line":2},"name":"E-ticaret platformu uçtan uca sipariş akışı","tags":[]},"uri":"../testdata/good/i18n_tr.feature"}} diff --git a/testdata/good/i18n_tr.feature.pickles.ndjson b/testdata/good/i18n_tr.feature.pickles.ndjson new file mode 100644 index 000000000..747177977 --- /dev/null +++ b/testdata/good/i18n_tr.feature.pickles.ndjson @@ -0,0 +1,32 @@ +{"pickle":{"astNodeIds":["8"],"id":"194","language":"tr","location":{"column":5,"line":14},"name":"Uygulama konteynerlerinin başlatılması","steps":[{"astNodeIds":["0"],"id":"187","text":"Docker Engine çalışıyor","type":"Context"},{"astNodeIds":["1"],"id":"188","text":"docker-compose.yml dosyası tanımlı","type":"Context"},{"astNodeIds":["3"],"id":"189","text":"tüm konteynerler durdurulmuştur","type":"Context"},{"astNodeIds":["4"],"id":"190","text":"docker-compose up komutu çalıştırılırsa","type":"Action"},{"astNodeIds":["5"],"id":"191","text":"veritabanı konteyneri 10 saniye içinde hazır olur","type":"Outcome"},{"astNodeIds":["6"],"id":"192","text":"API konteyneri 15 saniye içinde hazır olur","type":"Outcome"},{"astNodeIds":["7"],"id":"193","text":"Redis önbellek konteyneri başlatılır","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["13"],"id":"201","language":"tr","location":{"column":5,"line":21},"name":"Veritabanı bağlantı havuzu oluşturma","steps":[{"astNodeIds":["0"],"id":"195","text":"Docker Engine çalışıyor","type":"Context"},{"astNodeIds":["1"],"id":"196","text":"docker-compose.yml dosyası tanımlı","type":"Context"},{"astNodeIds":["9"],"id":"197","text":"PostgreSQL konteyneri çalışıyor","type":"Context"},{"astNodeIds":["10"],"id":"198","text":"API servisi ilk bağlantı talebini gönderirse","type":"Action"},{"astNodeIds":["11"],"id":"199","text":"20 bağlantılık havuz oluşturulur","type":"Outcome"},{"astNodeIds":["12"],"id":"200","text":"servis veritabanı sorgularını kabul etmeye başlar","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["18"],"id":"208","language":"tr","location":{"column":5,"line":27},"name":"Servis sağlık kontrolü","steps":[{"astNodeIds":["0"],"id":"202","text":"Docker Engine çalışıyor","type":"Context"},{"astNodeIds":["1"],"id":"203","text":"docker-compose.yml dosyası tanımlı","type":"Context"},{"astNodeIds":["14"],"id":"204","text":"tüm konteynerler ayakta çalışıyorlar","type":"Context"},{"astNodeIds":["15"],"id":"205","text":"yük dengeleyici sağlık kontrolü yaparsa","type":"Action"},{"astNodeIds":["16"],"id":"206","text":"tüm servisler 200 OK yanıtı döner","type":"Outcome"},{"astNodeIds":["17"],"id":"207","text":"yanıt süresi 500 milisaniyeyi aşarsa uyarı üretilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["26"],"id":"215","language":"tr","location":{"column":5,"line":37},"name":"Yeni kullanıcı kaydı","steps":[{"astNodeIds":["20"],"id":"209","text":"mobil uygulama açıktır","type":"Context"},{"astNodeIds":["21"],"id":"210","text":"bu e-posta adresi ile kayıtlı kullanıcı yoktur","type":"Context"},{"astNodeIds":["22"],"id":"211","text":"kullanıcı geçerli bilgilerle kayıt formunu gönderirse","type":"Action"},{"astNodeIds":["23"],"id":"212","text":"hesap oluşturulur","type":"Outcome"},{"astNodeIds":["24"],"id":"213","text":"doğrulama e-postası gönderilir","type":"Outcome"},{"astNodeIds":["25"],"id":"214","text":"hoş geldin bildirimi mobil cihaza iletilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["32"],"id":"221","language":"tr","location":{"column":5,"line":45},"name":"E-posta doğrulama","steps":[{"astNodeIds":["27"],"id":"216","text":"kullanıcı kayıt olmuştur","type":"Context"},{"astNodeIds":["28"],"id":"217","text":"doğrulama e-postası gönderilmiştir","type":"Context"},{"astNodeIds":["29"],"id":"218","text":"kullanıcı e-postadaki bağlantıya tıklarsa","type":"Action"},{"astNodeIds":["30"],"id":"219","text":"hesap durumu doğrulanmış olarak güncellenir","type":"Outcome"},{"astNodeIds":["31"],"id":"220","text":"kullanıcı alışverişe başlayabilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["38"],"id":"227","language":"tr","location":{"column":5,"line":52},"name":"Mobil uygulama ile oturum açma","steps":[{"astNodeIds":["33"],"id":"222","text":"kullanıcı hesabı doğrulanmıştır","type":"Context"},{"astNodeIds":["34"],"id":"223","text":"kullanıcı doğru e-posta ve şifre ile giriş yaptıysa","type":"Action"},{"astNodeIds":["35"],"id":"224","text":"JWT oturum belirteci oluşturulur","type":"Outcome"},{"astNodeIds":["36"],"id":"225","text":"oturum belirteci güvenli depolamaya kaydedilir","type":"Outcome"},{"astNodeIds":["37"],"id":"226","text":"kullanıcı ana sayfaya yönlendirilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["43"],"id":"232","language":"tr","location":{"column":5,"line":59},"name":"Üç başarısız giriş denemesi sonrası kilitleme","steps":[{"astNodeIds":["39"],"id":"228","text":"kullanıcı 2 kez yanlış şifre girmiştir","type":"Context"},{"astNodeIds":["40"],"id":"229","text":"üçüncü kez yanlış şifre girilirse","type":"Action"},{"astNodeIds":["41"],"id":"230","text":"hesap 15 dakika süreyle kilitlenir","type":"Outcome"},{"astNodeIds":["42"],"id":"231","text":"kullanıcıya e-posta ile bilgilendirme gönderilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["49"],"id":"238","language":"tr","location":{"column":5,"line":65},"name":"Biyometrik giriş","steps":[{"astNodeIds":["44"],"id":"233","text":"kullanıcı biyometrik girişi etkinleştirmiştir","type":"Context"},{"astNodeIds":["45"],"id":"234","text":"cihazda kayıtlı parmak izi vardır","type":"Context"},{"astNodeIds":["46"],"id":"235","text":"kullanıcı parmak izini okutursa","type":"Action"},{"astNodeIds":["47"],"id":"236","text":"oturum açılır","type":"Outcome"},{"astNodeIds":["48"],"id":"237","text":"biyometrik doğrulama başarısız olursa şifre ekranı gösterilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["56"],"id":"244","language":"tr","location":{"column":5,"line":76},"name":"Ana sayfa ürün listeleme","steps":[{"astNodeIds":["51"],"id":"239","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["52"],"id":"240","text":"150 aktif ürün kayıtlıdır","type":"Context"},{"astNodeIds":["53"],"id":"241","text":"kullanıcı ana sayfayı açarsa","type":"Action"},{"astNodeIds":["54"],"id":"242","text":"ilk 20 ürün listelenir","type":"Outcome"},{"astNodeIds":["55"],"id":"243","text":"her üründe ad, fiyat ve görsel gösterilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["62"],"id":"250","language":"tr","location":{"column":5,"line":83},"name":"Kategoriye göre filtreleme","steps":[{"astNodeIds":["57"],"id":"245","text":"kullanıcı ürün listesinde","type":"Context"},{"astNodeIds":["58"],"id":"246","text":"elektronik kategorisinde 45 ürün var","type":"Context"},{"astNodeIds":["59"],"id":"247","text":"kullanıcı elektronik kategorisini seçerse","type":"Action"},{"astNodeIds":["60"],"id":"248","text":"yalnızca elektronik kategorisi ürünlerin listelenmesidir","type":"Outcome"},{"astNodeIds":["61"],"id":"249","text":"sayfa başlığı elektronik olarak güncellenir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["68"],"id":"256","language":"tr","location":{"column":5,"line":90},"name":"Stokta olmayan ürünün görüntülenmesi","steps":[{"astNodeIds":["63"],"id":"251","text":"ürün stok adedi sıfır","type":"Context"},{"astNodeIds":["64"],"id":"252","text":"kullanıcı bu ürünün detay sayfasını açarsa","type":"Action"},{"astNodeIds":["65"],"id":"253","text":"ürün bilgileri görüntülenir","type":"Outcome"},{"astNodeIds":["66"],"id":"254","text":"sepete ekle düğmesi pasif olur","type":"Outcome"},{"astNodeIds":["67"],"id":"255","text":"stok bildirimi almak için e-posta kaydı yapılabilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["77","73"],"id":"260","language":"tr","location":{"column":9,"line":104},"name":"Fiyat aralığına göre filtreleme","steps":[{"astNodeIds":["69","73"],"id":"257","text":"kullanıcı ürün listesinde","type":"Context"},{"astNodeIds":["70","73"],"id":"258","text":"0 TL ile 100 TL arasındaki fiyat filtrelerini seçerse","type":"Action"},{"astNodeIds":["71","73"],"id":"259","text":"yalnızca bu aralıktaki ürünlerin gösterilmesidir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["77","74"],"id":"264","language":"tr","location":{"column":9,"line":105},"name":"Fiyat aralığına göre filtreleme","steps":[{"astNodeIds":["69","74"],"id":"261","text":"kullanıcı ürün listesinde","type":"Context"},{"astNodeIds":["70","74"],"id":"262","text":"100 TL ile 500 TL arasındaki fiyat filtrelerini seçerse","type":"Action"},{"astNodeIds":["71","74"],"id":"263","text":"yalnızca bu aralıktaki ürünlerin gösterilmesidir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["77","75"],"id":"268","language":"tr","location":{"column":9,"line":106},"name":"Fiyat aralığına göre filtreleme","steps":[{"astNodeIds":["69","75"],"id":"265","text":"kullanıcı ürün listesinde","type":"Context"},{"astNodeIds":["70","75"],"id":"266","text":"500 TL ile 2000 TL arasındaki fiyat filtrelerini seçerse","type":"Action"},{"astNodeIds":["71","75"],"id":"267","text":"yalnızca bu aralıktaki ürünlerin gösterilmesidir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["85"],"id":"275","language":"tr","location":{"column":5,"line":112},"name":"Sepete ilk ürün ekleme","steps":[{"astNodeIds":["79"],"id":"269","text":"sepet boş","type":"Context"},{"astNodeIds":["80"],"id":"270","text":"ürün stokta var","type":"Context"},{"astNodeIds":["81"],"id":"271","text":"kullanıcı ürünü sepete eklerse","type":"Action"},{"astNodeIds":["82"],"id":"272","text":"sepette 1 ürün görünür","type":"Outcome"},{"astNodeIds":["83"],"id":"273","text":"sepet simgesinde adet göstergesi güncellenir","type":"Outcome"},{"astNodeIds":["84"],"id":"274","text":"sepet toplam tutarı hesaplanır","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["92"],"id":"282","language":"tr","location":{"column":5,"line":120},"name":"Aynı üründen birden fazla ekleme","steps":[{"astNodeIds":["86"],"id":"276","text":"sepette 1 adet kalem var","type":"Context"},{"astNodeIds":["87"],"id":"277","text":"bu üründen 50 adet stokta var","type":"Context"},{"astNodeIds":["88"],"id":"278","text":"kullanıcı aynı ürünü tekrar sepete eklerse","type":"Action"},{"astNodeIds":["89"],"id":"279","text":"kalem adedi 2 olarak güncellenir","type":"Outcome"},{"astNodeIds":["90"],"id":"280","text":"toplam tutar birim fiyatın 2 katı olur","type":"Outcome"},{"astNodeIds":["91"],"id":"281","text":"sepete ayrı satır olarak eklenmez","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["98"],"id":"288","language":"tr","location":{"column":5,"line":128},"name":"Stok sınırını aşan adet girişi","steps":[{"astNodeIds":["93"],"id":"283","text":"sepette 1 adet ürün var","type":"Context"},{"astNodeIds":["94"],"id":"284","text":"bu üründen 3 adet stokta kaldı","type":"Context"},{"astNodeIds":["95"],"id":"285","text":"kullanıcı adedi 5 olarak güncellemeye çalışırsa","type":"Action"},{"astNodeIds":["96"],"id":"286","text":"sistem maksimum stok uyarısı gösterir","type":"Outcome"},{"astNodeIds":["97"],"id":"287","text":"adet otomatik olarak 3 ile sınırlandırılır","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["103"],"id":"293","language":"tr","location":{"column":5,"line":135},"name":"Sepetten ürün çıkarma","steps":[{"astNodeIds":["99"],"id":"289","text":"sepette 3 farklı ürün var","type":"Context"},{"astNodeIds":["100"],"id":"290","text":"kullanıcı bir ürünü sepetten çıkardıysa","type":"Action"},{"astNodeIds":["101"],"id":"291","text":"sepette 2 ürün kalır","type":"Outcome"},{"astNodeIds":["102"],"id":"292","text":"toplam tutar yeniden hesaplanır","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["109"],"id":"299","language":"tr","location":{"column":5,"line":141},"name":"Sepet zaman aşımı ve kurtarma","steps":[{"astNodeIds":["104"],"id":"294","text":"kullanıcı sepete ürün eklemiştir","type":"Context"},{"astNodeIds":["105"],"id":"295","text":"son işlemden bu yana 30 dakika geçmiştir","type":"Context"},{"astNodeIds":["106"],"id":"296","text":"kullanıcı sepet sayfasını açarsa","type":"Action"},{"astNodeIds":["107"],"id":"297","text":"sepet içeriği korunur","type":"Outcome"},{"astNodeIds":["108"],"id":"298","text":"fiyatlar güncel duruma göre yeniden hesaplanır","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["119"],"id":"307","language":"tr","location":{"column":5,"line":157},"name":"Teslimat adresi seçimi","steps":[{"astNodeIds":["111"],"id":"300","text":"ödeme altyapısı aktiftir","type":"Context"},{"astNodeIds":["112"],"id":"301","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["113"],"id":"302","text":"sepette en az 1 ürün vardır","type":"Context"},{"astNodeIds":["115"],"id":"303","text":"kullanıcının 2 kayıtlı adresi var","type":"Context"},{"astNodeIds":["116"],"id":"304","text":"kullanıcı ödeme sayfasına geçerse","type":"Action"},{"astNodeIds":["117"],"id":"305","text":"kayıtlı adresler listelenir","type":"Outcome"},{"astNodeIds":["118"],"id":"306","text":"varsayılan adres seçili olarak gösterilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["128"],"id":"319","language":"tr","location":{"column":5,"line":163},"name":"Kredi kartı ile başarılı ödeme","steps":[{"astNodeIds":["111"],"id":"308","text":"ödeme altyapısı aktiftir","type":"Context"},{"astNodeIds":["112"],"id":"309","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["113"],"id":"310","text":"sepette en az 1 ürün vardır","type":"Context"},{"astNodeIds":["120"],"id":"311","text":"sepet tutarı 750 TL","type":"Context"},{"astNodeIds":["121"],"id":"312","text":"kullanıcı teslimat adresini seçmiştir","type":"Context"},{"astNodeIds":["122"],"id":"313","text":"kullanıcı geçerli kredi kartı bilgilerini girip ödemeyi onaylarsa","type":"Action"},{"astNodeIds":["123"],"id":"314","text":"ödeme başarılı olarak işlenir","type":"Outcome"},{"astNodeIds":["124"],"id":"315","text":"sipariş numarası oluşturulur","type":"Outcome"},{"astNodeIds":["125"],"id":"316","text":"sipariş onay e-postası gönderilir","type":"Outcome"},{"astNodeIds":["126"],"id":"317","text":"mobil bildirim iletilir","type":"Outcome"},{"astNodeIds":["127"],"id":"318","text":"sepet temizlenir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["134"],"id":"328","language":"tr","location":{"column":5,"line":173},"name":"Yetersiz bakiye ile ödeme reddi","steps":[{"astNodeIds":["111"],"id":"320","text":"ödeme altyapısı aktiftir","type":"Context"},{"astNodeIds":["112"],"id":"321","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["113"],"id":"322","text":"sepette en az 1 ürün vardır","type":"Context"},{"astNodeIds":["129"],"id":"323","text":"sepet tutarı 2500 TL","type":"Context"},{"astNodeIds":["130"],"id":"324","text":"kullanıcı yetersiz bakiyeli kart ile ödeme yapmaya çalışırsa","type":"Action"},{"astNodeIds":["131"],"id":"325","text":"sonuç ödemenin reddedilmesidir","type":"Outcome"},{"astNodeIds":["132"],"id":"326","text":"kullanıcının sepet içeriği korunur","type":"Outcome"},{"astNodeIds":["133"],"id":"327","text":"farklı ödeme yöntemi seçeneği sunulur","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["141"],"id":"338","language":"tr","location":{"column":5,"line":180},"name":"3D Secure doğrulama","steps":[{"astNodeIds":["111"],"id":"329","text":"ödeme altyapısı aktiftir","type":"Context"},{"astNodeIds":["112"],"id":"330","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["113"],"id":"331","text":"sepette en az 1 ürün vardır","type":"Context"},{"astNodeIds":["135"],"id":"332","text":"sepet tutarı 1500 TL","type":"Context"},{"astNodeIds":["136"],"id":"333","text":"kullanıcı ödemeyi onaylarsa","type":"Action"},{"astNodeIds":["137"],"id":"334","text":"3D Secure doğrulama sayfası açılır","type":"Outcome"},{"astNodeIds":["138"],"id":"335","text":"kullanıcı SMS kodunu doğru girerse","type":"Action"},{"astNodeIds":["139"],"id":"336","text":"ödeme onaylanır","type":"Outcome"},{"astNodeIds":["140"],"id":"337","text":"sipariş oluşturulur","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["148"],"id":"348","language":"tr","location":{"column":5,"line":188},"name":"3D Secure zaman aşımı","steps":[{"astNodeIds":["111"],"id":"339","text":"ödeme altyapısı aktiftir","type":"Context"},{"astNodeIds":["112"],"id":"340","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["113"],"id":"341","text":"sepette en az 1 ürün vardır","type":"Context"},{"astNodeIds":["142"],"id":"342","text":"3D Secure doğrulama sayfası açılmıştır","type":"Context"},{"astNodeIds":["143"],"id":"343","text":"5 dakika geçmiştir ve kod girilmemiştir","type":"Context"},{"astNodeIds":["144"],"id":"344","text":"doğrulama süresi dolarsa","type":"Action"},{"astNodeIds":["145"],"id":"345","text":"işlem iptal edilir","type":"Outcome"},{"astNodeIds":["146"],"id":"346","text":"kullanıcı ödemeyi tekrar deneyebilir","type":"Outcome"},{"astNodeIds":["147"],"id":"347","text":"sepet içeriği ve adres bilgisi korunur","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["159","154"],"id":"356","language":"tr","location":{"column":9,"line":204},"name":"Taksitli ödeme hesaplama","steps":[{"astNodeIds":["111"],"id":"349","text":"ödeme altyapısı aktiftir","type":"Context"},{"astNodeIds":["112"],"id":"350","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["113"],"id":"351","text":"sepette en az 1 ürün vardır","type":"Context"},{"astNodeIds":["149","154"],"id":"352","text":"sepet tutarı 3000 TL","type":"Context"},{"astNodeIds":["150","154"],"id":"353","text":"kullanıcı 3 taksit seçeneğini tercih ederse","type":"Action"},{"astNodeIds":["151","154"],"id":"354","text":"aylık taksit tutarı 1000 TL olarak gösterilir","type":"Outcome"},{"astNodeIds":["152","154"],"id":"355","text":"toplam ödenecek tutar 3000 TL olarak gösterilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["159","155"],"id":"364","language":"tr","location":{"column":9,"line":205},"name":"Taksitli ödeme hesaplama","steps":[{"astNodeIds":["111"],"id":"357","text":"ödeme altyapısı aktiftir","type":"Context"},{"astNodeIds":["112"],"id":"358","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["113"],"id":"359","text":"sepette en az 1 ürün vardır","type":"Context"},{"astNodeIds":["149","155"],"id":"360","text":"sepet tutarı 3000 TL","type":"Context"},{"astNodeIds":["150","155"],"id":"361","text":"kullanıcı 6 taksit seçeneğini tercih ederse","type":"Action"},{"astNodeIds":["151","155"],"id":"362","text":"aylık taksit tutarı 530 TL olarak gösterilir","type":"Outcome"},{"astNodeIds":["152","155"],"id":"363","text":"toplam ödenecek tutar 3180 TL olarak gösterilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["159","156"],"id":"372","language":"tr","location":{"column":9,"line":206},"name":"Taksitli ödeme hesaplama","steps":[{"astNodeIds":["111"],"id":"365","text":"ödeme altyapısı aktiftir","type":"Context"},{"astNodeIds":["112"],"id":"366","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["113"],"id":"367","text":"sepette en az 1 ürün vardır","type":"Context"},{"astNodeIds":["149","156"],"id":"368","text":"sepet tutarı 3000 TL","type":"Context"},{"astNodeIds":["150","156"],"id":"369","text":"kullanıcı 9 taksit seçeneğini tercih ederse","type":"Action"},{"astNodeIds":["151","156"],"id":"370","text":"aylık taksit tutarı 367 TL olarak gösterilir","type":"Outcome"},{"astNodeIds":["152","156"],"id":"371","text":"toplam ödenecek tutar 3303 TL olarak gösterilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["159","157"],"id":"380","language":"tr","location":{"column":9,"line":207},"name":"Taksitli ödeme hesaplama","steps":[{"astNodeIds":["111"],"id":"373","text":"ödeme altyapısı aktiftir","type":"Context"},{"astNodeIds":["112"],"id":"374","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["113"],"id":"375","text":"sepette en az 1 ürün vardır","type":"Context"},{"astNodeIds":["149","157"],"id":"376","text":"sepet tutarı 3000 TL","type":"Context"},{"astNodeIds":["150","157"],"id":"377","text":"kullanıcı 12 taksit seçeneğini tercih ederse","type":"Action"},{"astNodeIds":["151","157"],"id":"378","text":"aylık taksit tutarı 290 TL olarak gösterilir","type":"Outcome"},{"astNodeIds":["152","157"],"id":"379","text":"toplam ödenecek tutar 3480 TL olarak gösterilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["167"],"id":"391","language":"tr","location":{"column":5,"line":209},"name":"Mobil cüzdan ile hızlı ödeme","steps":[{"astNodeIds":["111"],"id":"381","text":"ödeme altyapısı aktiftir","type":"Context"},{"astNodeIds":["112"],"id":"382","text":"kullanıcı oturum açmıştır","type":"Context"},{"astNodeIds":["113"],"id":"383","text":"sepette en az 1 ürün vardır","type":"Context"},{"astNodeIds":["160"],"id":"384","text":"kullanıcının mobil cüzdanı tanımlıdır","type":"Context"},{"astNodeIds":["161"],"id":"385","text":"cüzdanda kayıtlı kart vardır","type":"Context"},{"astNodeIds":["162"],"id":"386","text":"kullanıcı tek dokunuşla öde seçeneğini kullanırsa","type":"Action"},{"astNodeIds":["163"],"id":"387","text":"biyometrik doğrulama istenir","type":"Outcome"},{"astNodeIds":["164"],"id":"388","text":"kullanıcı parmak izini onayladıysa","type":"Action"},{"astNodeIds":["165"],"id":"389","text":"ödeme işlenir","type":"Outcome"},{"astNodeIds":["166"],"id":"390","text":"sipariş anında oluşturulur","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["173"],"id":"396","language":"tr","location":{"column":5,"line":222},"name":"Sipariş durum bildirimi","steps":[{"astNodeIds":["169"],"id":"392","text":"sipariş başarıyla oluşturulmuştur","type":"Context"},{"astNodeIds":["170"],"id":"393","text":"sipariş durumu hazırlanıyor olarak güncellenirse","type":"Action"},{"astNodeIds":["171"],"id":"394","text":"kullanıcıya mobil bildirim gönderilir","type":"Outcome"},{"astNodeIds":["172"],"id":"395","text":"sipariş takip sayfasında durum güncellenir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["179"],"id":"402","language":"tr","location":{"column":5,"line":228},"name":"Kargoya teslim bildirimi","steps":[{"astNodeIds":["174"],"id":"397","text":"sipariş hazırlanmıştır","type":"Context"},{"astNodeIds":["175"],"id":"398","text":"kargo firması siparişi teslim alırsa","type":"Action"},{"astNodeIds":["176"],"id":"399","text":"kargo takip numarası oluşturulur","type":"Outcome"},{"astNodeIds":["177"],"id":"400","text":"kullanıcıya takip bağlantısı bildirimi gönderilir","type":"Outcome"},{"astNodeIds":["178"],"id":"401","text":"tahmini teslimat tarihi hesaplanır","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} +{"pickle":{"astNodeIds":["185"],"id":"408","language":"tr","location":{"column":5,"line":235},"name":"Başarılı teslimat onayı","steps":[{"astNodeIds":["180"],"id":"403","text":"sipariş kargoda","type":"Context"},{"astNodeIds":["181"],"id":"404","text":"kargo firması teslim edildi bilgisini gönderdiyse","type":"Action"},{"astNodeIds":["182"],"id":"405","text":"sipariş durumu teslim edildi olarak güncellenir","type":"Outcome"},{"astNodeIds":["183"],"id":"406","text":"iade süresi başlangıç tarihi kaydedilir","type":"Outcome"},{"astNodeIds":["184"],"id":"407","text":"kullanıcıya değerlendirme daveti gönderilir","type":"Outcome"}],"tags":[],"uri":"../testdata/good/i18n_tr.feature"}} diff --git a/testdata/good/i18n_tr.feature.source.ndjson b/testdata/good/i18n_tr.feature.source.ndjson new file mode 100644 index 000000000..850e0b60a --- /dev/null +++ b/testdata/good/i18n_tr.feature.source.ndjson @@ -0,0 +1 @@ +{"source":{"data":"# language: tr\nÖzellik: E-ticaret platformu uçtan uca sipariş akışı\n Bir e-ticaret mobil uygulamasının altyapı kurulumundan\n ödeme tamamlanmasına kadar tüm akışını doğrular.\n\n # -- 1. ALTYAPI -- Sistem Ayağa Kalkma -----------\n\n Kural: Konteyner ortamı hazırlığı\n\n Ön Koşul:\n Mevcut Docker Engine çalışıyor\n Sistemde docker-compose.yml dosyası tanımlı\n\n Senaryo: Uygulama konteynerlerinin başlatılması\n Mevcut tüm konteynerler durdurulmuştur\n Ne zaman docker-compose up komutu çalıştırılırsa\n Beklenen veritabanı konteyneri 10 saniye içinde hazır olur\n Ve API konteyneri 15 saniye içinde hazır olur\n Ayrıca Redis önbellek konteyneri başlatılır\n\n Senaryo: Veritabanı bağlantı havuzu oluşturma\n Mevcut PostgreSQL konteyneri çalışıyor\n Ne zaman API servisi ilk bağlantı talebini gönderirse\n Beklenen 20 bağlantılık havuz oluşturulur\n Gerekli servis veritabanı sorgularını kabul etmeye başlar\n\n Senaryo: Servis sağlık kontrolü\n Mevcut tüm konteynerler ayakta çalışıyorlar\n Ne zaman yük dengeleyici sağlık kontrolü yaparsa\n Gereken tüm servisler 200 OK yanıtı döner\n Ancak yanıt süresi 500 milisaniyeyi aşarsa uyarı üretilir\n\n # -- 2. KİMLİK DOĞRULAMA -- Kayıt ve Giriş ------\n\n İş Kuralı: Kullanıcı kimlik doğrulama akışı\n\n Senaryo: Yeni kullanıcı kaydı\n Mevcut mobil uygulama açıktır\n Sistemde bu e-posta adresi ile kayıtlı kullanıcı yoktur\n Ne zaman kullanıcı geçerli bilgilerle kayıt formunu gönderirse\n Beklenen hesap oluşturulur\n Ve doğrulama e-postası gönderilir\n Aynı zamanda hoş geldin bildirimi mobil cihaza iletilir\n\n Senaryo: E-posta doğrulama\n Önceden kullanıcı kayıt olmuştur\n Zaten doğrulama e-postası gönderilmiştir\n Ne zaman kullanıcı e-postadaki bağlantıya tıklarsa\n Beklenen hesap durumu doğrulanmış olarak güncellenir\n Böylece kullanıcı alışverişe başlayabilir\n\n Senaryo: Mobil uygulama ile oturum açma\n Mevcut kullanıcı hesabı doğrulanmıştır\n Ne zaman kullanıcı doğru e-posta ve şifre ile giriş yaptıysa\n Gereken JWT oturum belirteci oluşturulur\n Ve oturum belirteci güvenli depolamaya kaydedilir\n Bunun üzerine kullanıcı ana sayfaya yönlendirilir\n\n Senaryo: Üç başarısız giriş denemesi sonrası kilitleme\n Mevcut kullanıcı 2 kez yanlış şifre girmiştir\n Ne zaman üçüncü kez yanlış şifre girilirse\n Gerekli hesap 15 dakika süreyle kilitlenir\n Aynı zamanda kullanıcıya e-posta ile bilgilendirme gönderilir\n\n Senaryo: Biyometrik giriş\n Halihazırda kullanıcı biyometrik girişi etkinleştirmiştir\n Mevcut cihazda kayıtlı parmak izi vardır\n Eğer kullanıcı parmak izini okutursa\n Gerekli oturum açılır\n Ancak biyometrik doğrulama başarısız olursa şifre ekranı gösterilir\n\n # -- 3. ÜRÜN -- Listeleme ve Arama ---------------\n\n Kural: Ürün kataloğu ve arama işlevleri\n\n Senaryo: Ana sayfa ürün listeleme\n Mevcut kullanıcı oturum açmıştır\n Sistemde 150 aktif ürün kayıtlıdır\n Ne zaman kullanıcı ana sayfayı açarsa\n Beklenen ilk 20 ürün listelenir\n Ve her üründe ad, fiyat ve görsel gösterilir\n\n Senaryo: Kategoriye göre filtreleme\n Mevcut kullanıcı ürün listesinde\n Sistemde elektronik kategorisinde 45 ürün var\n Eğer kullanıcı elektronik kategorisini seçerse\n Beklenen yalnızca elektronik kategorisi ürünlerin listelenmesidir\n Bu durumda sayfa başlığı elektronik olarak güncellenir\n\n Senaryo: Stokta olmayan ürünün görüntülenmesi\n Mevcut ürün stok adedi sıfır\n Eğer kullanıcı bu ürünün detay sayfasını açarsa\n Beklenen ürün bilgileri görüntülenir\n Ancak sepete ekle düğmesi pasif olur\n Buna rağmen stok bildirimi almak için e-posta kaydı yapılabilir\n\n Senaryo taslağı: Fiyat aralığına göre filtreleme\n Mevcut kullanıcı ürün listesinde\n Ne zaman TL ile TL arasındaki fiyat filtrelerini seçerse\n Beklenen yalnızca bu aralıktaki ürünlerin gösterilmesidir\n\n Örnekler:\n | min | maks |\n | 0 | 100 |\n | 100 | 500 |\n | 500 | 2000 |\n\n # -- 4. SEPET -- Ürün Ekleme ve Yönetim ----------\n\n Kural: Alışveriş sepeti yönetimi\n\n Senaryo: Sepete ilk ürün ekleme\n Mevcut sepet boş\n Sistemde ürün stokta var\n Ne zaman kullanıcı ürünü sepete eklerse\n O zaman sepette 1 ürün görünür\n Ve sepet simgesinde adet göstergesi güncellenir\n Aynı zamanda sepet toplam tutarı hesaplanır\n\n Senaryo: Aynı üründen birden fazla ekleme\n Mevcut sepette 1 adet kalem var\n Sistemde bu üründen 50 adet stokta var\n Şayet kullanıcı aynı ürünü tekrar sepete eklerse\n Beklenen kalem adedi 2 olarak güncellenir\n Dolayısıyla toplam tutar birim fiyatın 2 katı olur\n Ancak sepete ayrı satır olarak eklenmez\n\n Senaryo: Stok sınırını aşan adet girişi\n Mevcut sepette 1 adet ürün var\n Sistemde bu üründen 3 adet stokta kaldı\n Şayet kullanıcı adedi 5 olarak güncellemeye çalışırsa\n Gerekli sistem maksimum stok uyarısı gösterir\n Bu durumda adet otomatik olarak 3 ile sınırlandırılır\n\n Senaryo: Sepetten ürün çıkarma\n Mevcut sepette 3 farklı ürün var\n Eğer kullanıcı bir ürünü sepetten çıkardıysa\n O zaman sepette 2 ürün kalır\n Bunun üzerine toplam tutar yeniden hesaplanır\n\n Senaryo: Sepet zaman aşımı ve kurtarma\n Daha önce kullanıcı sepete ürün eklemiştir\n Halihazırda son işlemden bu yana 30 dakika geçmiştir\n Ne zaman kullanıcı sepet sayfasını açarsa\n Beklenen sepet içeriği korunur\n Ancak fiyatlar güncel duruma göre yeniden hesaplanır\n\n # -- 5. ÖDEME -- Mobil Ödeme Akışı ---------------\n\n İş Kuralı: Mobil ödeme işleme kuralları\n\n Ön Koşul:\n Sistemde ödeme altyapısı aktiftir\n Mevcut kullanıcı oturum açmıştır\n Zaten sepette en az 1 ürün vardır\n\n Senaryo: Teslimat adresi seçimi\n Mevcut kullanıcının 2 kayıtlı adresi var\n Ne zaman kullanıcı ödeme sayfasına geçerse\n Beklenen kayıtlı adresler listelenir\n Ve varsayılan adres seçili olarak gösterilir\n\n Senaryo: Kredi kartı ile başarılı ödeme\n Mevcut sepet tutarı 750 TL\n Önceden kullanıcı teslimat adresini seçmiştir\n Ne zaman kullanıcı geçerli kredi kartı bilgilerini girip ödemeyi onaylarsa\n Beklenen ödeme başarılı olarak işlenir\n Gereken sipariş numarası oluşturulur\n Ve sipariş onay e-postası gönderilir\n Aynı zamanda mobil bildirim iletilir\n Bunun ardından sepet temizlenir\n\n Senaryo: Yetersiz bakiye ile ödeme reddi\n Mevcut sepet tutarı 2500 TL\n Eğer kullanıcı yetersiz bakiyeli kart ile ödeme yapmaya çalışırsa\n Beklenen sonuç ödemenin reddedilmesidir\n Fakat kullanıcının sepet içeriği korunur\n Ve farklı ödeme yöntemi seçeneği sunulur\n\n Senaryo: 3D Secure doğrulama\n Mevcut sepet tutarı 1500 TL\n Ne zaman kullanıcı ödemeyi onaylarsa\n Gerekli 3D Secure doğrulama sayfası açılır\n Ne zaman kullanıcı SMS kodunu doğru girerse\n Beklenen ödeme onaylanır\n Böylece sipariş oluşturulur\n\n Senaryo: 3D Secure zaman aşımı\n Mevcut 3D Secure doğrulama sayfası açılmıştır\n Halihazırda 5 dakika geçmiştir ve kod girilmemiştir\n Eğer doğrulama süresi dolarsa\n Beklenen işlem iptal edilir\n Ancak kullanıcı ödemeyi tekrar deneyebilir\n Aynı zamanda sepet içeriği ve adres bilgisi korunur\n\n Senaryo şablonu: Taksitli ödeme hesaplama\n Mevcut sepet tutarı TL\n Eğer kullanıcı taksit seçeneğini tercih ederse\n Beklenen aylık taksit tutarı TL olarak gösterilir\n Böylece toplam ödenecek tutar TL olarak gösterilir\n\n Değerler:\n | tutar | taksit | aylik | toplam |\n | 3000 | 3 | 1000 | 3000 |\n | 3000 | 6 | 530 | 3180 |\n | 3000 | 9 | 367 | 3303 |\n | 3000 | 12 | 290 | 3480 |\n\n Senaryo: Mobil cüzdan ile hızlı ödeme\n Mevcut kullanıcının mobil cüzdanı tanımlıdır\n Zaten cüzdanda kayıtlı kart vardır\n Ne zaman kullanıcı tek dokunuşla öde seçeneğini kullanırsa\n Gerekli biyometrik doğrulama istenir\n Şayet kullanıcı parmak izini onayladıysa\n Gereken ödeme işlenir\n Böylece sipariş anında oluşturulur\n\n # -- 6. SİPARİŞ SONRASI -- Kargo ve Bildirim ----\n\n Kural: Sipariş sonrası süreç yönetimi\n\n Senaryo: Sipariş durum bildirimi\n Önceden sipariş başarıyla oluşturulmuştur\n Ne zaman sipariş durumu hazırlanıyor olarak güncellenirse\n O zaman kullanıcıya mobil bildirim gönderilir\n Ayrıca sipariş takip sayfasında durum güncellenir\n\n Senaryo: Kargoya teslim bildirimi\n Önceden sipariş hazırlanmıştır\n Ne zaman kargo firması siparişi teslim alırsa\n Beklenen kargo takip numarası oluşturulur\n Ve kullanıcıya takip bağlantısı bildirimi gönderilir\n Bunun üzerine tahmini teslimat tarihi hesaplanır\n\n Senaryo: Başarılı teslimat onayı\n Mevcut sipariş kargoda\n Ne zaman kargo firması teslim edildi bilgisini gönderdiyse\n Beklenen sipariş durumu teslim edildi olarak güncellenir\n Aynı zamanda iade süresi başlangıç tarihi kaydedilir\n Bunun üzerine kullanıcıya değerlendirme daveti gönderilir\n","mediaType":"text/x.cucumber.gherkin+plain","uri":"../testdata/good/i18n_tr.feature"}} diff --git a/testdata/good/i18n_tr.feature.tokens b/testdata/good/i18n_tr.feature.tokens new file mode 100644 index 000000000..1a1224c48 --- /dev/null +++ b/testdata/good/i18n_tr.feature.tokens @@ -0,0 +1,241 @@ +(1:1)Language:/tr/ +(2:1)FeatureLine:()Özellik/E-ticaret platformu uçtan uca sipariş akışı/ +(3:1)Other:/ Bir e-ticaret mobil uygulamasının altyapı kurulumundan/ +(4:1)Other:/ ödeme tamamlanmasına kadar tüm akışını doğrular./ +(5:1)Other:// +(6:1)Comment:/ # -- 1. ALTYAPI -- Sistem Ayağa Kalkma -----------/ +(7:1)Other:// +(8:3)RuleLine:()Kural/Konteyner ortamı hazırlığı/ +(9:1)Empty:// +(10:5)BackgroundLine:()Ön Koşul// +(11:7)StepLine:(Context)Mevcut /Docker Engine çalışıyor/ +(12:7)StepLine:(Context)Sistemde /docker-compose.yml dosyası tanımlı/ +(13:1)Empty:// +(14:5)ScenarioLine:()Senaryo/Uygulama konteynerlerinin başlatılması/ +(15:7)StepLine:(Context)Mevcut /tüm konteynerler durdurulmuştur/ +(16:7)StepLine:(Action)Ne zaman /docker-compose up komutu çalıştırılırsa/ +(17:7)StepLine:(Outcome)Beklenen /veritabanı konteyneri 10 saniye içinde hazır olur/ +(18:7)StepLine:(Conjunction)Ve /API konteyneri 15 saniye içinde hazır olur/ +(19:7)StepLine:(Conjunction)Ayrıca /Redis önbellek konteyneri başlatılır/ +(20:1)Empty:// +(21:5)ScenarioLine:()Senaryo/Veritabanı bağlantı havuzu oluşturma/ +(22:7)StepLine:(Context)Mevcut /PostgreSQL konteyneri çalışıyor/ +(23:7)StepLine:(Action)Ne zaman /API servisi ilk bağlantı talebini gönderirse/ +(24:7)StepLine:(Outcome)Beklenen /20 bağlantılık havuz oluşturulur/ +(25:7)StepLine:(Outcome)Gerekli /servis veritabanı sorgularını kabul etmeye başlar/ +(26:1)Empty:// +(27:5)ScenarioLine:()Senaryo/Servis sağlık kontrolü/ +(28:7)StepLine:(Context)Mevcut /tüm konteynerler ayakta çalışıyorlar/ +(29:7)StepLine:(Action)Ne zaman /yük dengeleyici sağlık kontrolü yaparsa/ +(30:7)StepLine:(Outcome)Gereken /tüm servisler 200 OK yanıtı döner/ +(31:7)StepLine:(Conjunction)Ancak /yanıt süresi 500 milisaniyeyi aşarsa uyarı üretilir/ +(32:1)Empty:// +(33:1)Comment:/ # -- 2. KİMLİK DOĞRULAMA -- Kayıt ve Giriş ------/ +(34:1)Empty:// +(35:3)RuleLine:()İş Kuralı/Kullanıcı kimlik doğrulama akışı/ +(36:1)Empty:// +(37:5)ScenarioLine:()Senaryo/Yeni kullanıcı kaydı/ +(38:7)StepLine:(Context)Mevcut /mobil uygulama açıktır/ +(39:7)StepLine:(Context)Sistemde /bu e-posta adresi ile kayıtlı kullanıcı yoktur/ +(40:7)StepLine:(Action)Ne zaman /kullanıcı geçerli bilgilerle kayıt formunu gönderirse/ +(41:7)StepLine:(Outcome)Beklenen /hesap oluşturulur/ +(42:7)StepLine:(Conjunction)Ve /doğrulama e-postası gönderilir/ +(43:7)StepLine:(Conjunction)Aynı zamanda /hoş geldin bildirimi mobil cihaza iletilir/ +(44:1)Empty:// +(45:5)ScenarioLine:()Senaryo/E-posta doğrulama/ +(46:7)StepLine:(Context)Önceden /kullanıcı kayıt olmuştur/ +(47:7)StepLine:(Context)Zaten /doğrulama e-postası gönderilmiştir/ +(48:7)StepLine:(Action)Ne zaman /kullanıcı e-postadaki bağlantıya tıklarsa/ +(49:7)StepLine:(Outcome)Beklenen /hesap durumu doğrulanmış olarak güncellenir/ +(50:7)StepLine:(Outcome)Böylece /kullanıcı alışverişe başlayabilir/ +(51:1)Empty:// +(52:5)ScenarioLine:()Senaryo/Mobil uygulama ile oturum açma/ +(53:7)StepLine:(Context)Mevcut /kullanıcı hesabı doğrulanmıştır/ +(54:7)StepLine:(Action)Ne zaman /kullanıcı doğru e-posta ve şifre ile giriş yaptıysa/ +(55:7)StepLine:(Outcome)Gereken /JWT oturum belirteci oluşturulur/ +(56:7)StepLine:(Conjunction)Ve /oturum belirteci güvenli depolamaya kaydedilir/ +(57:7)StepLine:(Outcome)Bunun üzerine /kullanıcı ana sayfaya yönlendirilir/ +(58:1)Empty:// +(59:5)ScenarioLine:()Senaryo/Üç başarısız giriş denemesi sonrası kilitleme/ +(60:7)StepLine:(Context)Mevcut /kullanıcı 2 kez yanlış şifre girmiştir/ +(61:7)StepLine:(Action)Ne zaman /üçüncü kez yanlış şifre girilirse/ +(62:7)StepLine:(Outcome)Gerekli /hesap 15 dakika süreyle kilitlenir/ +(63:7)StepLine:(Conjunction)Aynı zamanda /kullanıcıya e-posta ile bilgilendirme gönderilir/ +(64:1)Empty:// +(65:5)ScenarioLine:()Senaryo/Biyometrik giriş/ +(66:7)StepLine:(Context)Halihazırda /kullanıcı biyometrik girişi etkinleştirmiştir/ +(67:7)StepLine:(Context)Mevcut /cihazda kayıtlı parmak izi vardır/ +(68:7)StepLine:(Action)Eğer /kullanıcı parmak izini okutursa/ +(69:7)StepLine:(Outcome)Gerekli /oturum açılır/ +(70:7)StepLine:(Conjunction)Ancak /biyometrik doğrulama başarısız olursa şifre ekranı gösterilir/ +(71:1)Empty:// +(72:1)Comment:/ # -- 3. ÜRÜN -- Listeleme ve Arama ---------------/ +(73:1)Empty:// +(74:3)RuleLine:()Kural/Ürün kataloğu ve arama işlevleri/ +(75:1)Empty:// +(76:5)ScenarioLine:()Senaryo/Ana sayfa ürün listeleme/ +(77:7)StepLine:(Context)Mevcut /kullanıcı oturum açmıştır/ +(78:7)StepLine:(Context)Sistemde /150 aktif ürün kayıtlıdır/ +(79:7)StepLine:(Action)Ne zaman /kullanıcı ana sayfayı açarsa/ +(80:7)StepLine:(Outcome)Beklenen /ilk 20 ürün listelenir/ +(81:7)StepLine:(Conjunction)Ve /her üründe ad, fiyat ve görsel gösterilir/ +(82:1)Empty:// +(83:5)ScenarioLine:()Senaryo/Kategoriye göre filtreleme/ +(84:7)StepLine:(Context)Mevcut /kullanıcı ürün listesinde/ +(85:7)StepLine:(Context)Sistemde /elektronik kategorisinde 45 ürün var/ +(86:7)StepLine:(Action)Eğer /kullanıcı elektronik kategorisini seçerse/ +(87:7)StepLine:(Outcome)Beklenen /yalnızca elektronik kategorisi ürünlerin listelenmesidir/ +(88:7)StepLine:(Outcome)Bu durumda /sayfa başlığı elektronik olarak güncellenir/ +(89:1)Empty:// +(90:5)ScenarioLine:()Senaryo/Stokta olmayan ürünün görüntülenmesi/ +(91:7)StepLine:(Context)Mevcut /ürün stok adedi sıfır/ +(92:7)StepLine:(Action)Eğer /kullanıcı bu ürünün detay sayfasını açarsa/ +(93:7)StepLine:(Outcome)Beklenen /ürün bilgileri görüntülenir/ +(94:7)StepLine:(Conjunction)Ancak /sepete ekle düğmesi pasif olur/ +(95:7)StepLine:(Conjunction)Buna rağmen /stok bildirimi almak için e-posta kaydı yapılabilir/ +(96:1)Empty:// +(97:5)ScenarioLine:()Senaryo taslağı/Fiyat aralığına göre filtreleme/ +(98:7)StepLine:(Context)Mevcut /kullanıcı ürün listesinde/ +(99:7)StepLine:(Action)Ne zaman / TL ile TL arasındaki fiyat filtrelerini seçerse/ +(100:7)StepLine:(Outcome)Beklenen /yalnızca bu aralıktaki ürünlerin gösterilmesidir/ +(101:1)Empty:// +(102:7)ExamplesLine:()Örnekler// +(103:9)TableRow://11:min,18:maks +(104:9)TableRow://11:0,18:100 +(105:9)TableRow://11:100,18:500 +(106:9)TableRow://11:500,18:2000 +(107:1)Empty:// +(108:1)Comment:/ # -- 4. SEPET -- Ürün Ekleme ve Yönetim ----------/ +(109:1)Empty:// +(110:3)RuleLine:()Kural/Alışveriş sepeti yönetimi/ +(111:1)Empty:// +(112:5)ScenarioLine:()Senaryo/Sepete ilk ürün ekleme/ +(113:7)StepLine:(Context)Mevcut /sepet boş/ +(114:7)StepLine:(Context)Sistemde /ürün stokta var/ +(115:7)StepLine:(Action)Ne zaman /kullanıcı ürünü sepete eklerse/ +(116:7)StepLine:(Outcome)O zaman /sepette 1 ürün görünür/ +(117:7)StepLine:(Conjunction)Ve /sepet simgesinde adet göstergesi güncellenir/ +(118:7)StepLine:(Conjunction)Aynı zamanda /sepet toplam tutarı hesaplanır/ +(119:1)Empty:// +(120:5)ScenarioLine:()Senaryo/Aynı üründen birden fazla ekleme/ +(121:7)StepLine:(Context)Mevcut /sepette 1 adet kalem var/ +(122:7)StepLine:(Context)Sistemde /bu üründen 50 adet stokta var/ +(123:7)StepLine:(Action)Şayet /kullanıcı aynı ürünü tekrar sepete eklerse/ +(124:7)StepLine:(Outcome)Beklenen /kalem adedi 2 olarak güncellenir/ +(125:7)StepLine:(Outcome)Dolayısıyla /toplam tutar birim fiyatın 2 katı olur/ +(126:7)StepLine:(Conjunction)Ancak /sepete ayrı satır olarak eklenmez/ +(127:1)Empty:// +(128:5)ScenarioLine:()Senaryo/Stok sınırını aşan adet girişi/ +(129:7)StepLine:(Context)Mevcut /sepette 1 adet ürün var/ +(130:7)StepLine:(Context)Sistemde /bu üründen 3 adet stokta kaldı/ +(131:7)StepLine:(Action)Şayet /kullanıcı adedi 5 olarak güncellemeye çalışırsa/ +(132:7)StepLine:(Outcome)Gerekli /sistem maksimum stok uyarısı gösterir/ +(133:7)StepLine:(Outcome)Bu durumda /adet otomatik olarak 3 ile sınırlandırılır/ +(134:1)Empty:// +(135:5)ScenarioLine:()Senaryo/Sepetten ürün çıkarma/ +(136:7)StepLine:(Context)Mevcut /sepette 3 farklı ürün var/ +(137:7)StepLine:(Action)Eğer /kullanıcı bir ürünü sepetten çıkardıysa/ +(138:7)StepLine:(Outcome)O zaman /sepette 2 ürün kalır/ +(139:7)StepLine:(Outcome)Bunun üzerine /toplam tutar yeniden hesaplanır/ +(140:1)Empty:// +(141:5)ScenarioLine:()Senaryo/Sepet zaman aşımı ve kurtarma/ +(142:7)StepLine:(Context)Daha önce /kullanıcı sepete ürün eklemiştir/ +(143:7)StepLine:(Context)Halihazırda /son işlemden bu yana 30 dakika geçmiştir/ +(144:7)StepLine:(Action)Ne zaman /kullanıcı sepet sayfasını açarsa/ +(145:7)StepLine:(Outcome)Beklenen /sepet içeriği korunur/ +(146:7)StepLine:(Conjunction)Ancak /fiyatlar güncel duruma göre yeniden hesaplanır/ +(147:1)Empty:// +(148:1)Comment:/ # -- 5. ÖDEME -- Mobil Ödeme Akışı ---------------/ +(149:1)Empty:// +(150:3)RuleLine:()İş Kuralı/Mobil ödeme işleme kuralları/ +(151:1)Empty:// +(152:5)BackgroundLine:()Ön Koşul// +(153:7)StepLine:(Context)Sistemde /ödeme altyapısı aktiftir/ +(154:7)StepLine:(Context)Mevcut /kullanıcı oturum açmıştır/ +(155:7)StepLine:(Context)Zaten /sepette en az 1 ürün vardır/ +(156:1)Empty:// +(157:5)ScenarioLine:()Senaryo/Teslimat adresi seçimi/ +(158:7)StepLine:(Context)Mevcut /kullanıcının 2 kayıtlı adresi var/ +(159:7)StepLine:(Action)Ne zaman /kullanıcı ödeme sayfasına geçerse/ +(160:7)StepLine:(Outcome)Beklenen /kayıtlı adresler listelenir/ +(161:7)StepLine:(Conjunction)Ve /varsayılan adres seçili olarak gösterilir/ +(162:1)Empty:// +(163:5)ScenarioLine:()Senaryo/Kredi kartı ile başarılı ödeme/ +(164:7)StepLine:(Context)Mevcut /sepet tutarı 750 TL/ +(165:7)StepLine:(Context)Önceden /kullanıcı teslimat adresini seçmiştir/ +(166:7)StepLine:(Action)Ne zaman /kullanıcı geçerli kredi kartı bilgilerini girip ödemeyi onaylarsa/ +(167:7)StepLine:(Outcome)Beklenen /ödeme başarılı olarak işlenir/ +(168:7)StepLine:(Outcome)Gereken /sipariş numarası oluşturulur/ +(169:7)StepLine:(Conjunction)Ve /sipariş onay e-postası gönderilir/ +(170:7)StepLine:(Conjunction)Aynı zamanda /mobil bildirim iletilir/ +(171:7)StepLine:(Outcome)Bunun ardından /sepet temizlenir/ +(172:1)Empty:// +(173:5)ScenarioLine:()Senaryo/Yetersiz bakiye ile ödeme reddi/ +(174:7)StepLine:(Context)Mevcut /sepet tutarı 2500 TL/ +(175:7)StepLine:(Action)Eğer /kullanıcı yetersiz bakiyeli kart ile ödeme yapmaya çalışırsa/ +(176:7)StepLine:(Outcome)Beklenen /sonuç ödemenin reddedilmesidir/ +(177:7)StepLine:(Conjunction)Fakat /kullanıcının sepet içeriği korunur/ +(178:7)StepLine:(Conjunction)Ve /farklı ödeme yöntemi seçeneği sunulur/ +(179:1)Empty:// +(180:5)ScenarioLine:()Senaryo/3D Secure doğrulama/ +(181:7)StepLine:(Context)Mevcut /sepet tutarı 1500 TL/ +(182:7)StepLine:(Action)Ne zaman /kullanıcı ödemeyi onaylarsa/ +(183:7)StepLine:(Outcome)Gerekli /3D Secure doğrulama sayfası açılır/ +(184:7)StepLine:(Action)Ne zaman /kullanıcı SMS kodunu doğru girerse/ +(185:7)StepLine:(Outcome)Beklenen /ödeme onaylanır/ +(186:7)StepLine:(Outcome)Böylece /sipariş oluşturulur/ +(187:1)Empty:// +(188:5)ScenarioLine:()Senaryo/3D Secure zaman aşımı/ +(189:7)StepLine:(Context)Mevcut /3D Secure doğrulama sayfası açılmıştır/ +(190:7)StepLine:(Context)Halihazırda /5 dakika geçmiştir ve kod girilmemiştir/ +(191:7)StepLine:(Action)Eğer /doğrulama süresi dolarsa/ +(192:7)StepLine:(Outcome)Beklenen /işlem iptal edilir/ +(193:7)StepLine:(Conjunction)Ancak /kullanıcı ödemeyi tekrar deneyebilir/ +(194:7)StepLine:(Conjunction)Aynı zamanda /sepet içeriği ve adres bilgisi korunur/ +(195:1)Empty:// +(196:5)ScenarioLine:()Senaryo şablonu/Taksitli ödeme hesaplama/ +(197:7)StepLine:(Context)Mevcut /sepet tutarı TL/ +(198:7)StepLine:(Action)Eğer /kullanıcı taksit seçeneğini tercih ederse/ +(199:7)StepLine:(Outcome)Beklenen /aylık taksit tutarı TL olarak gösterilir/ +(200:7)StepLine:(Outcome)Böylece /toplam ödenecek tutar TL olarak gösterilir/ +(201:1)Empty:// +(202:7)ExamplesLine:()Değerler// +(203:9)TableRow://11:tutar,19:taksit,28:aylik,37:toplam +(204:9)TableRow://11:3000,19:3,28:1000,37:3000 +(205:9)TableRow://11:3000,19:6,28:530,37:3180 +(206:9)TableRow://11:3000,19:9,28:367,37:3303 +(207:9)TableRow://11:3000,19:12,28:290,37:3480 +(208:1)Empty:// +(209:5)ScenarioLine:()Senaryo/Mobil cüzdan ile hızlı ödeme/ +(210:7)StepLine:(Context)Mevcut /kullanıcının mobil cüzdanı tanımlıdır/ +(211:7)StepLine:(Context)Zaten /cüzdanda kayıtlı kart vardır/ +(212:7)StepLine:(Action)Ne zaman /kullanıcı tek dokunuşla öde seçeneğini kullanırsa/ +(213:7)StepLine:(Outcome)Gerekli /biyometrik doğrulama istenir/ +(214:7)StepLine:(Action)Şayet /kullanıcı parmak izini onayladıysa/ +(215:7)StepLine:(Outcome)Gereken /ödeme işlenir/ +(216:7)StepLine:(Outcome)Böylece /sipariş anında oluşturulur/ +(217:1)Empty:// +(218:1)Comment:/ # -- 6. SİPARİŞ SONRASI -- Kargo ve Bildirim ----/ +(219:1)Empty:// +(220:3)RuleLine:()Kural/Sipariş sonrası süreç yönetimi/ +(221:1)Empty:// +(222:5)ScenarioLine:()Senaryo/Sipariş durum bildirimi/ +(223:7)StepLine:(Context)Önceden /sipariş başarıyla oluşturulmuştur/ +(224:7)StepLine:(Action)Ne zaman /sipariş durumu hazırlanıyor olarak güncellenirse/ +(225:7)StepLine:(Outcome)O zaman /kullanıcıya mobil bildirim gönderilir/ +(226:7)StepLine:(Conjunction)Ayrıca /sipariş takip sayfasında durum güncellenir/ +(227:1)Empty:// +(228:5)ScenarioLine:()Senaryo/Kargoya teslim bildirimi/ +(229:7)StepLine:(Context)Önceden /sipariş hazırlanmıştır/ +(230:7)StepLine:(Action)Ne zaman /kargo firması siparişi teslim alırsa/ +(231:7)StepLine:(Outcome)Beklenen /kargo takip numarası oluşturulur/ +(232:7)StepLine:(Conjunction)Ve /kullanıcıya takip bağlantısı bildirimi gönderilir/ +(233:7)StepLine:(Outcome)Bunun üzerine /tahmini teslimat tarihi hesaplanır/ +(234:1)Empty:// +(235:5)ScenarioLine:()Senaryo/Başarılı teslimat onayı/ +(236:7)StepLine:(Context)Mevcut /sipariş kargoda/ +(237:7)StepLine:(Action)Ne zaman /kargo firması teslim edildi bilgisini gönderdiyse/ +(238:7)StepLine:(Outcome)Beklenen /sipariş durumu teslim edildi olarak güncellenir/ +(239:7)StepLine:(Conjunction)Aynı zamanda /iade süresi başlangıç tarihi kaydedilir/ +(240:7)StepLine:(Outcome)Bunun üzerine /kullanıcıya değerlendirme daveti gönderilir/ +EOF