Сценарий: Достижение целей - пометка сделанного

Этот коммит содержится в:
Softonik 2024-06-26 16:29:41 +03:00 коммит произвёл Nobody
родитель e7ed7658bb
коммит 9f5a468141
10 изменённых файлов: 166 добавлений и 24 удалений

Просмотреть файл

@ -4,6 +4,17 @@ import (
"errors"
)
const (
ЦельОПС = "ОПС"
Цель1пр = "1пр"
ЦельУСН = "УСН"
)
var (
ErrНеизвестныйКвартал = errors.New("неизвестный квартал")
ErrНеизвестнаяЦель = errors.New("неизвестная цель")
)
type Цели struct {
год *Год
Кварталы []*Квартал
@ -17,7 +28,7 @@ func NewЦели(год *Год) *Цели {
}
func (c *Цели) Квартал(in int) (k *Квартал, e error) {
e = errors.New("неизвестный квартал")
e = ErrНеизвестныйКвартал
if in < НомерПервогоКвартала || in > НомерПоследнегоКвартала {
return

Просмотреть файл

@ -5,7 +5,6 @@
Сценарий: Платёж по ОПС в квартале
Дано Год: 2024
Дано Квартал: <квартал>
Когда Расчитать год
То Есть цель: ОПС за этот квартал: 12375
Примеры:
@ -19,7 +18,6 @@
Дано Год: 2024
Дано Квартал: 1
Дано Доход: <доход>
Когда Расчитать год
То Есть цель: 1% сверх 300тр за квартал: "<оплатить_за_квартал>"
То Есть цель: 1% сверх 300тр за год: "<оплатить_за_год>"
@ -42,7 +40,6 @@
Дано Доход <доход2> за 2 квартал
Дано Доход <доход3> за 3 квартал
Дано Доход <доход4> за 4 квартал
Когда Расчитать год
То Есть цель: 1% сверх 300тр за 1 квартал: "<оплатить1>"
То Есть цель: 1% сверх 300тр за 2 квартал: "<оплатить2>"
То Есть цель: 1% сверх 300тр за 3 квартал: "<оплатить3>"
@ -71,7 +68,6 @@
Дано Год: 2024
Дано Квартал: <квартал>
Дано Доход: 500000
Когда Расчитать год
То Есть цель: УСН за этот квартал: 20000
Примеры:
@ -87,7 +83,6 @@
Дано Доход 100000 за 1 квартал
Дано Доход 200000 за 1 квартал
Дано Доход 400000 за 2 квартал
Когда Расчитать год
То Доход в квартал: 300000
То Доход в год: 700000
@ -95,3 +90,47 @@
Дано Год: 2024
Когда Задан счёт "123"
То Считывается счёт "123"
Сценарий: Достижение целей: неизвестная - ошибка
Дано Год: 2024
Дано Должна быть ошибка
Когда Действие: "неизвестная" за 1 квартал
Сценарий: Достижение целей: ОПС
Дано Год: 2024
* Цель "ОПС" за 1 квартал достигнута: "-"
* Цель "1пр" за 1 квартал достигнута: "-"
* Цель "УСН" за 1 квартал достигнута: "-"
Когда Действие: "ОПС" за 1 квартал
То Цель "ОПС" за 1 квартал достигнута: "+"
То Цель "ОПС" за 2 квартал достигнута: "-"
То Цель "ОПС" за 3 квартал достигнута: "-"
То Цель "ОПС" за 4 квартал достигнута: "-"
То Цель "1пр" за 1 квартал достигнута: "-"
То Цель "УСН" за 1 квартал достигнута: "-"
Сценарий: Достижение целей: 1пр сверх 300тр
Дано Год: 2024
* Цель "ОПС" за 1 квартал достигнута: "-"
* Цель "1пр" за 1 квартал достигнута: "-"
* Цель "УСН" за 1 квартал достигнута: "-"
Когда Действие: "1пр" за 1 квартал
То Цель "ОПС" за 1 квартал достигнута: "-"
То Цель "1пр" за 1 квартал достигнута: "+"
То Цель "1пр" за 2 квартал достигнута: "-"
То Цель "1пр" за 3 квартал достигнута: "-"
То Цель "1пр" за 4 квартал достигнута: "-"
То Цель "УСН" за 1 квартал достигнута: "-"
Сценарий: Достижение целей: УСН
Дано Год: 2024
* Цель "ОПС" за 1 квартал достигнута: "-"
* Цель "1пр" за 1 квартал достигнута: "-"
* Цель "УСН" за 1 квартал достигнута: "-"
Когда Действие: "УСН" за 1 квартал
То Цель "ОПС" за 1 квартал достигнута: "-"
То Цель "1пр" за 1 квартал достигнута: "-"
То Цель "УСН" за 1 квартал достигнута: "+"
То Цель "УСН" за 2 квартал достигнута: "-"
То Цель "УСН" за 3 квартал достигнута: "-"
То Цель "УСН" за 4 квартал достигнута: "-"

Просмотреть файл

@ -20,7 +20,6 @@ func InitializeScenario(ctx *godog.ScenarioContext) {
ctx.Step(`^Доход (\d+) за (\d+) квартал$`, доходЗаКвартал)
ctx.Step(`^Доход в квартал: (\d+)$`, доходВКвартал)
ctx.Step(`^Доход в год: (\d+)$`, доходВГод)
ctx.Step(`^Расчитать год$`, расчитатьГод)
ctx.Step(`^Есть цель: ОПС за этот квартал: (\d+)$`, естьЦельОПСЗаЭтотКвартал)
ctx.Step(`^Есть цель: УСН за этот квартал: (\d+)$`, естьЦельУСНЗаЭтотКвартал)
ctx.Step(`^Есть цель: (\d+)% сверх (\d+)тр за квартал: "([^"]*)"$`, естьЦельСверхТрЗаКвартал)
@ -28,7 +27,9 @@ func InitializeScenario(ctx *godog.ScenarioContext) {
ctx.Step(`^Есть цель: (\d+)% сверх (\d+)тр за год: "([^"]*)"$`, естьЦельСверхТрЗаГод)
ctx.Step(`^Задан счёт "([^"]*)"$`, заданСчёт)
ctx.Step(`^Считывается счёт "([^"]*)"$`, считываетсяСчёт)
ctx.Step(`^Должна быть ошибка$`, должнаБытьОшибка)
ctx.Step(`^Действие: "([^"]*)" за (\d+) квартал$`, действиеЗаКвартал)
ctx.Step(`^Цель "([^"]*)" за (\d+) квартал достигнута: "([^"]*)"$`, цельЗаКварталДостигнута)
// -----------------------
ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) {
beforeScenario()

Просмотреть файл

@ -5,11 +5,12 @@ import (
)
type Квартал struct {
номер int
год *Год
доход float64
ОПС *ОПС_type
УСН *УСН_type
номер int
год *Год
доход float64
ОПС *ОПС_type
УСН *УСН_type
сверх300тр1пр bool
}
func NewКвартал(номер int, год *Год) *Квартал {
@ -47,3 +48,27 @@ func (k *Квартал) ПроцентСверх300тр() (float64, error) {
return процентСуммы(сумма), nil
}
func (k *Квартал) Сделать(цель string) error {
switch цель {
case ЦельОПС:
return k.ОПС.Сделать()
case Цель1пр:
k.сверх300тр1пр = true
return nil
case ЦельУСН:
return k.УСН.Сделать()
}
return ErrНеизвестнаяЦель
}
func (k *Квартал) ЦельДостигнута(цель string) bool {
switch цель {
case ЦельОПС:
return k.ОПС.Сделано()
case Цель1пр:
return k.сверх300тр1пр
case ЦельУСН:
return k.УСН.Сделано()
}
return false
}

Просмотреть файл

@ -3,6 +3,7 @@ package schet
type ОПС_type struct {
квартал *Квартал
сумма float64
сделано bool
}
func NewОПС_type(квартал *Квартал) *ОПС_type {
@ -16,3 +17,11 @@ func NewОПС_type(квартал *Квартал) *ОПС_type {
func (o *ОПС_type) Сумма() float64 {
return o.сумма
}
func (o *ОПС_type) Сделать() error {
o.сделано = true
return nil
}
func (o *ОПС_type) Сделано() bool {
return o.сделано
}

Просмотреть файл

@ -45,6 +45,23 @@ func (g *Год) Счёт() string {
return g.счёт
}
func (g *Год) Сделать(цель string, квартал int) error {
k, err := g.Квартал(квартал)
if err != nil {
return err
}
return k.Сделать(цель)
}
func (g *Год) ЦельДостигнута(цель string, квартал int) bool {
k, err := g.Квартал(квартал)
if err != nil {
return false
}
return k.ЦельДостигнута(цель)
}
func (g *Год) Квартал(in int) (k *Квартал, e error) {
return g.цели.Квартал(in)
}

Просмотреть файл

@ -8,12 +8,13 @@ import (
)
type testData struct {
g *Год
год_номер int
квартал_номер int
квартал *Квартал
доход float64
цели *Цели
g *Год
год_номер int
квартал_номер int
квартал *Квартал
доход float64
цели *Цели
должнаБытьОшибка bool
}
var (
@ -67,8 +68,6 @@ func доходВГод(доход float64) {
Ω(t.g.Доход()).To(Be(доход), "доходВГод")
}
func расчитатьГод() {}
func естьЦельОПСЗаЭтотКвартал(v float64) {
Ω(t.квартал.ОПС.Сумма()).To(Be(v), "ОПС за квартал")
}
@ -96,3 +95,18 @@ func заданСчёт(v string) {
func считываетсяСчёт(v string) {
Ω(t.g.Счёт()).To(Be(v), "считываетсяСчёт")
}
func должнаБытьОшибка() {
t.должнаБытьОшибка = true
}
func действиеЗаКвартал(цель string, квартал int) {
err := t.g.Сделать(цель, квартал)
if t.должнаБытьОшибка {
Err(err)
} else {
Ok(err)
}
}
func цельЗаКварталДостигнута(цель string, квартал int, достигнута string) {
Ω(t.g.ЦельДостигнута(цель, квартал)).To(Be(Истина(достигнута)), "цельЗаКварталДостигнута: "+цель)
}

Просмотреть файл

@ -1,7 +1,5 @@
package schet
import "errors"
const (
Сумма300тр = 300000
)
@ -18,7 +16,7 @@ func NewСумматор300тр() *Сумматор300тр {
func (s *Сумматор300тр) Квартал(номер int) (float64, error) {
index := номер - 1
if index >= len(s.сверхСуммы) || index < 0 {
return 0, errors.New("неизвестный квартал")
return 0, ErrНеизвестныйКвартал
}
return s.сверхСуммы[index], nil
}

Просмотреть файл

@ -2,6 +2,7 @@ package schet
type УСН_type struct {
квартал *Квартал
сделано bool
}
func NewУСН_type(квартал *Квартал) *УСН_type {
@ -16,3 +17,11 @@ func (o *УСН_type) Сумма() float64 {
procent := d / 100.
return 4 * procent
}
func (o *УСН_type) Сделать() error {
o.сделано = true
return nil
}
func (o *УСН_type) Сделано() bool {
return o.сделано
}

Просмотреть файл

@ -2,6 +2,7 @@ package testlib
import (
"context"
"errors"
"fmt"
"strconv"
"time"
@ -18,6 +19,16 @@ func NoErr(err error) {
var Ok = NoErr
func Err(err error) {
ExpectWithOffset(1, err).To(HaveOccurred())
}
func ErrIs(err, target error) {
ExpectWithOffset(1, err).To(HaveOccurred())
v := errors.Is(err, target)
s := fmt.Sprintf("ErrIs: '%v' != '%v'", err, target)
ExpectWithOffset(1, v).To(BeTrue(), s)
}
func Yes(b bool) {
ExpectWithOffset(1, b).To(BeTrue())
}
@ -36,6 +47,14 @@ func Atof(in string) float64 {
return res
}
func Истина(in string) bool {
switch in {
case "t", "true", "+", "да":
return true
}
return false
}
var TestResult error
func InitializeGomegaForGodog(ctx *godog.ScenarioContext) {