Сценарий: Достижение целей - пометка сделанного
Этот коммит содержится в:
родитель
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) {
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче