рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓реЗрдЦрдХ, рдЬрд┐рд╕ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣, Node.js рдкрд░ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рд╕рд▓рд╛рд╣рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рд░ рд╕рд╛рд▓ 10 рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреЗ рдЧреНрд░рд╛рд╣рдХ, рдЬреЛ рдХрд╛рдлреА рдиреНрдпрд╛рдпрд╕рдВрдЧрдд рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдореВрд▓реНрдпрд╡рд╛рди рдкрд░реАрдХреНрд╖рдг рддрдХрдиреАрдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рдордиреЗ рдЖрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдиреЛрдЯреНрд╕ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреАрди рджрд░реНрдЬрди рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдереАред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЪрдпрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рдЙрдирдХреЗ рдЙрдЪрд┐рдд рдбрд┐рдЬрд╛рдЗрди рдкрд░, рдЙрдирдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдкрд░, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ CI / CD рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдЬреЗрд╕реНрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреБрдЫ рдореЗрдВ рдореЛрдЪрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдкрд░реАрдХреНрд╖рдг рдкрджреНрдзрддрд┐ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред
тЖТ
Node.js рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдгред рднрд╛рдЧ 2. рдкрд░реАрдХреНрд╖рдг рдкреНрд░рджрд░реНрд╢рди рдореВрд▓реНрдпрд╛рдВрдХрди, рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдФрд░ рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгтЦН0ред рд╕реНрд╡рд░реНрдгрд┐рдо рдирд┐рдпрдо: рдкрд░реАрдХреНрд╖рдг рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реАрдзреЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП
рдХреНрдпрд╛ рдЖрдк рдХрд┐рд╕реА рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ - рдПрдХ рджреЛрд╕реНрдд, рдПрдХ рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рд╕рджрд╕реНрдп, рдлрд┐рд▓реНрдо рдХрд╛ рдирд╛рдпрдХ, рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдЪреНрдЫреЗ рдореВрдб рдХреЗ рд╕рд╛рде рдЪрд╛рд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрджрд▓реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╣рдореЗрд╢рд╛ рдорджрдж рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣рддрд╛ рд╣реИ? рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдЪреНрдЫреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдиреНрд╣реЗрдВ рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓рд╛рднрдХрд╛рд░реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЬрдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ, рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЪрдпрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рддреИрдпрд╛рд░реА рдФрд░ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рд░рд▓ рдФрд░ рд▓рдЪреАрд▓реЗ рд╣реИрдВ, рдФрд░ рдХрднреА-рдХрднреА рдЖрдк рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреА рд╕рд╛рджрдЧреА рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЯреЗрд╕реНрдЯ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд▓рдЧреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреАрдо, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд░ рд╕рдВрднрд╡ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреА рд╣реИ, рдЬреЛ рдХрд┐, рдПрдХ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЙрддреНрдкрд╛рдж рдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреА рд╣реИред рдирддреАрдЬрддрди, рдЗрд╕ рддрд░рд╣ рдХреА рдЯреАрдо рдмрд╣реБрдд рдЦреБрд╢ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЙрд╕реЗ рдЕрднреА рддрдХ рдПрдХ рдФрд░ рдЬрдЯрд┐рд▓ "рдкреНрд░реЛрдЬреЗрдХреНрдЯ" рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдореБрдЦреНрдп рдХреЛрдб рдХреЗ рдкрд░реАрдХреНрд╖рдг рдмрдврд╝рддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рдЖрдк рдкрд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░рдВрддрд░ рдЪрд┐рдВрддрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреЗ рд╣реИрдВ, рддреЛ рдЙрди рдкрд░ рдХрд╛рдо рдпрд╛ рддреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛, рдПрдХ рд╕рднреНрдп рд╕реНрддрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЗрддрдирд╛ рд╕рдордп рдФрд░ рдКрд░реНрдЬрд╛ рджреЗрдЧрд╛ рдХрд┐ рдпрд╣ рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рд╕реНрддрд░ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЯреЗрд╕реНрдЯ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЦрдВрдб 1. рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдирд╛рдЯреЙрдореА
тЦН1ред рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рдбрд┐рдЬрд╛рдЗрди рдХрд░реЗрдВ рддрд╛рдХрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдЖрдкрдХреЛ рдмрддрд╛рдП рдХрд┐ рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХрд┐рд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рд╣реИ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдХреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
рдкрд░реАрдХреНрд╖рдг рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЖрд╡реЗрджрди рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдРрд╕реЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд╡реЗрджрди рдХреЛрдб рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рд╣реИред рдпрд╣ рдПрдХ рдкрд░реАрдХреНрд╖рдХ, рдПрдХ DevOps рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреИрдирд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╛ рдЦреБрдж рдбреЗрд╡рд▓рдкрд░, рдЬрд┐рд╕рдиреЗ рдЗрд╕рдХреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рджреЗрдЦрд╛ рд╣реИред рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЙрддреНрдкрд╛рдж рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдкрд░реАрдХреНрд╖рдг рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдХрд▓реНрдкрдирд╛ рддреАрди рднрд╛рдЧреЛрдВ рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
- рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
ProductsService.addNewProduct
рд╡рд┐рдзрд┐ред - рдкрд░реАрдХреНрд╖рдг рдХрд┐рд╕ рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдФрд░ рдХрд┐рд╕ рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд╣рд╛рдВ рдорд╛рд▓ рдХреА рдХреАрдордд рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдирдП рдЙрддреНрдкрд╛рдж рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИред
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рд░рд┐рдкреЛрд░реНрдЯ рд╕реЗ рдЖрдк рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣
Add product
рдирд╛рдордХ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЙрддреНрдкрд╛рдж рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реБрдЖ?
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдкрд░реАрдХреНрд╖рдг рдХреА рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рддреАрди рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдкрд░реАрдХреНрд╖рдг рд░рд┐рдкреЛрд░реНрдЯ рдЙрддреНрдкрд╛рдж рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдПрдХ рдмрдпрд╛рди рдпреБрдХреНрдд рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдкрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдЙрддреНрдкрд╛рдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рдЯреЗрд╕реНрдЯ рдирд╛рдордХрд░рдг, рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо- рдЙрддреНрдкрд╛рдж рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рд╡рд╛рд▓рд╛ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдпрд╛ рддреЛ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╡рд┐рд╢реЗрд╖ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдИрдореЗрд▓ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- рдЬрдм рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирд╛рдордХрд░рдг, рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЙрджреНрджреЗрд╢реНрдп, рдЗрд╕рдХреЗ рдкрд░рд┐рджреГрд╢реНрдп рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЙрддреНрдкрд╛рдж рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдФрд░ рдЙрддреНрдкрд╛рдж рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
- рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЖрд╡реЗрджрди рдХреЛрдб рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рдЧрдП рд╣реИрдВред рдпреЗ рдкрд░реАрдХреНрд╖рдХ рд╣реИрдВ, DevOps рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реИрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдмрд╛рдж рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред
тЦН2ред рд╡рд░реНрдгрди рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЙрддреНрдкрд╛рдж рднрд╛рд╖рд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ: рдмреАрдбреАрдбреА-рд╢реИрд▓реА рдХреЗ рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╢реИрд▓реА рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рддреБрд░рдВрдд рдЕрдкрдиреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭ рд▓реЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рд╕рд╢рд░реНрдд рдирд┐рд░реНрдорд╛рдгреЛрдВ рд╕реЗ рднрд░реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХреА рд╕рдордЭ рдХреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдмрд╛рдж, рдЙрдореНрдореАрджреЛрдВ рдХреЛ рд╕рд╛рдзрд╛рд░рдг рдХреЗ рдХрд░реАрдм рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдШреЛрд╖рдгрд╛рддреНрдордХ BDD рд╢реИрд▓реА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп
expect
рдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА
expect
ред рдпрджрд┐ рдЪреА рдпрд╛ рдЬреЗрд╕реНрдЯ рдореЗрдВ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХ рдХрдерди рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рдмрдпрд╛рдиреЛрдВ рдХреА рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ
рдЬреЗрд╕реНрдЯ рдореЗрдВ рдирдП "рдЪреЗрдХ" рдЬреЛрдбрд╝рдиреЗ рдпрд╛
рдЪрд╛рдп рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ
рдкреНрд▓рдЧрдЗрдиреНрд╕ рд▓рд┐рдЦрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
рдпрджрд┐ рдЖрдк рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдХрдо рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░
.skip()
рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╖реНрдЯрдкреНрд░рдж рдЪреЗрдХ рдХреЛ рдЫреЛрдбрд╝
.skip()
ред
рдЧрд▓рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд╛рдардХ рдХреЛ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреАред
it("When asking for an admin, ensure only ordered admins in results" , ()={
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдЖрдк рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╕рдЪрдореБрдЪ рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред
it("When asking for an admin, ensure only ordered admins in results" , ()={
тЦН3ред рд╡рд┐рд╢реЗрд╖ рдкреНрд▓рдЧрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдЕрд╕реНрддрд░ рдХрд░рдирд╛
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
ESLint рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рдРрд╕реЗ рдХреЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдПрд╕реНрд▓рд┐рдВрдЯ-рдкреНрд▓рдЧрдЗрди-рдореЛрдЪрд╛ рдкреНрд▓рдЧ
-рдЗрди рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧрд╛ рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ (рдФрд░
describe()
рд╡рдВрд╢рдЬ рдирд╣реАрдВ рд╣реИ
describe()
), рдпрд╛ рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЭреВрдареА рдЙрдореНрдореАрджреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдХрд┐ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рдПрд╕реНрд▓рд┐рдВрдЯ-рдкреНрд▓рдЧрдЗрди-рдЬреЗрд╕реНрдЯ рдкреНрд▓рдЧрдЗрди рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдмрдпрд╛рди рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
рдбреЗрд╡рд▓рдкрд░ рдпрд╣ рджреЗрдЦрдХрд░ рдЦреБрд╢ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдб 90% рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ 100% рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд╕ рд╣реЛ рдЧрдП рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдкрд░реАрдХреНрд╖рдг, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреБрдЫ рднреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрд╕ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╣реА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ "рдкрд░реАрдХреНрд╖рдг" рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЧрд▓рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рджреГрд╢реНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ, рдЬреЛ, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд▓рд┐рдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
describe("Too short description", () => { const userToken = userService.getDefaultToken()
тЦН4ред рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЫрдбрд╝реА - рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдХреЛрдб рддрдВрддреНрд░реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рднрд╛рд░ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рд╣реИ рдФрд░ рд▓рдЧрднрдЧ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрдкреАрдЖрдИ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рдШрдВрдЯреЗ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рднреА рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдЯреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВ, рдЖрдЬ рддрдХ? рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рддрд░реАрдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рдЙрдирдХреЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рднреА рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рддреЛ рдРрд╕рд╛ рдкрд░реАрдХреНрд╖рдг рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЧрд▓рдд рдбреЗрдЯрд╛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ "рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░реАрдХреНрд╖рдг" рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрдкреАрдЖрдИ ("рд╡реНрд╣рд╛рдЗрдЯ рдмреЙрдХреНрд╕" рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛, рдбреЗрд╡рд▓рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЫреЛрдЯреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЛрдб рдХреЗ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдкрд░ред рдкрд░реАрдХреНрд╖рдг рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдереЛрдбрд╝реА рд╕реА рдХреЛрдб рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рднреА, рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╕рд┐рд╕реНрдЯрдо рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗред рдирддреАрдЬрддрди, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдХреЗ рд╕рдорд░реНрдерди рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд░ рд▓реЛрдб рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛рддрд╛ рд╣реИред
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
рдкрд░реАрдХреНрд╖рдг рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЪрд░рд╡рд╛рд╣реЗ рд▓рдбрд╝рдХреЗ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ "рдорджрдж" рдХреЗ рд░реЛрдиреЗ рдХреЗ рд╕рд╛рде рдХрд┐рд╕рд╛рдиреЛрдВ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИ! рднреЗрдбрд╝рд┐рдпрд╛! тАЭрдЬрдм рдкрд╛рд╕ рдореЗрдВ рдХреЛрдИ рднреЗрдбрд╝рд┐рдпрд╛ рдирд╣реАрдВ рдерд╛ред рд▓реЛрдЧреЛрдВ рдиреЗ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдзреЛрдЦрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЬрдм рднреЗрдбрд╝рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рддреЛ рдХреЛрдИ рднреА рдмрдЪрд╛рд╡ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЭреВрдареЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рдХреБрдЫ рдЖрдВрддрд░рд┐рдХ рдЪрд░ рдХреЗ рдирд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬреЛ рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЬрд▓реНрдж рд╣реА рдЕрдкрдиреЗ "рдЪреАрдЦ" рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЕрдВрддрддрдГ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрдВрднреАрд░ рдЧрд▓рддреА рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЧрд▓рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред
class ProductService{
тЦН5ред рдЙрдкрдпреБрдХреНрдд рдмреИрдХрдЕрдк рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЪреБрдиреЗрдВ: рдореЙрдмреНрд╕ рд╕реЗ рдмрдЪреЗрдВ, рд╕реНрдЯрдмреНрд╕ рдФрд░ рдЬрд╛рд╕реВрд╕реЛрдВ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВ
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛрдЧреБрдирд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрд╡реЗрджрди рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рдмрд┐рдирд╛, рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдпрд╣рд╛рдБ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ - рд╕реНрдЯрдмреНрд╕ (рд╕реНрдЯрдм) рдФрд░ рдЬрд╛рд╕реВрд╕ (рдЬрд╛рд╕реВрд╕), рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реЗ рдЗрд╕ рдЙрддреНрдкрд╛рдж рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХреЛ рдереЛрдбрд╝рд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, рдореЛрдХреНрд╕ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдкрд░ рднрд╛рд░реА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмреЛрдЭ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдКрдкрд░ рдмрд╛рдд рдХреА рдереА, рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╕рдордп "рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕" рдкрджреНрдзрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХреАред
рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдПрдХ рд╕рд░рд▓ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВ: "рдХреНрдпрд╛ рдореИрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рддрдХрдиреАрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?"ред рдпрджрд┐ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк "рд╡реНрд╣рд╛рдЗрдЯ рдмреЙрдХреНрд╕" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрд╛рдж рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рднреБрдЧрддрд╛рди рд╕реЗрд╡рд╛ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рддреЛ рдЖрдк рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реБрдП рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рдПрдХ рдЪреЗрдХ рд╡реНрдпрд╡рд╣рд╛рд░, рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЖрд╡реЗрджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рдмрдирд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдЬрд╛рд╕реВрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рднреБрдЧрддрд╛рди рд╕реЗрд╡рд╛ рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдкрд░, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдИрдореЗрд▓ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣, рдлрд┐рд░ рд╕реЗ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЬрд╛рдВрдЪ рд╣реЛрдЧреА, рдЬреЛ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рддрдХрдиреАрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдореЗрдВ рджрд░реНрдЬ рдХреА рдЧрдИ рд╣реИ, рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ: "рднреБрдЧрддрд╛рди рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХреЛ рдПрдХ рдИрдореЗрд▓ рднреЗрдЬреЗрдВ"ред рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреБрдЧрддрд╛рди рд╕реЗрд╡рд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдСрдкрд░реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЙрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдкрд░, рддреЛ рд╣рдо рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░реЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕реАрдзреЗ рдЖрд╡реЗрджрди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░, рдХрд╛рдлреА рд╢рд╛рдпрдж рдЕрдХреНрд╕рд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
рдХрд┐рд╕реА рднреА рдХреЛрдб рд░реАрдлрд╝реИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рд╕рднреА рдореЛрдХреА, рд░реАрдлрд╝реИрдХреНрдЯрд░рд┐рдВрдЧ рдФрд░ рдЙрдирдХреЗ рдХреЛрдб рдХреА рдЦреЛрдЬ рдХрд░рдиреА рд╣реЛрдЧреАред рдирддреАрдЬрддрди, рдкрд░реАрдХреНрд╖рдг рд╕рдорд░реНрдерди рдПрдХ рднрд╛рд░реА рдмреЛрдЭ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╡реЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рджреБрд╢реНрдорди рдмрди рдЬрд╛рдПрдВрдЧреЗ, рди рдХрд┐ рдЙрд╕рдХреЗ рджреЛрд╕реНрддред
рдЧрд▓рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдПрдХ рдирдХрд▓реА рд╡рд╕реНрддреБ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
it("When a valid product is about to be deleted, ensure data access DAL was called once, with the right product and right config", async () => {
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдЬрд╛рд╕реВрд╕ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
it("When a valid product is about to be deleted, ensure an email is sent", async () => {
тЦН6ред рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, "рдлреВ" рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рддрдХ рд╕реАрдорд┐рдд рди рд╣реЛрдХрд░ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
рдЕрдХреНрд╕рд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИрдВред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЗ рдХрд░реАрдм, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЬрд▓реНрджреА рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рд╣реЛрдЧреАред
Faker рдЬреИрд╕реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рд╡рд┐рд╢реЗрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░рд┐рдпреЛрдВ рдЬреИрд╕реА рдбреЗрдЯрд╛ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓реЗрдХрд┐рди рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдлреЛрди рдирдВрдмрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдмреИрдВрдХ рдХрд╛рд░реНрдб рдирдВрдмрд░, рдХрдВрдкрдиреА рдХреЗ рдирд╛рдо рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ "рд▓реЙрд░реЗрдо рдЗрдкреНрд╕рдо" рдЧреНрд░рдВрде рднреА рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдФрд░ рднреА рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдкрддреНрддрд┐-рдЖрдзрд╛рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реА рдЕрдЧрд▓реА рд╕рд┐рдлрд╛рд░рд┐рд╢ рджреЗрдЦреЗрдВред
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЙрдиреНрд╣реЗрдВ "рдлреВ" рдЬреИрд╕реА рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрддреНрдкрд╛рджрди рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рд╣реИрдХрд░ рдЙрд╕реЗ
@3e2ddsf . ##' 1 fdsfds . fds432 AAAA
рдЬреИрд╕реА рдХреБрдЫ рдЪреАрдЬрд╝ рджреЗрддрд╛ рд╣реИ
@3e2ddsf . ##' 1 fdsfds . fds432 AAAA
@3e2ddsf . ##' 1 fdsfds . fds432 AAAA
@3e2ddsf . ##' 1 fdsfds . fds432 AAAA
рдЧрд▓рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг
рд╕рд┐рд╕реНрдЯрдо рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
const addProduct = (name, price) =>{ const productNameRegexNoSpace = /^\S*$/;
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рдорд╛рди рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
it("Better: When adding new valid product, get successful confirmation", async () => { const addProductResult = addProduct(faker.commerce.productName(), faker.random.number());
тЦН тЦНред рдЧреБрдг-рдЖрдзрд╛рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдЗрдирдкреБрдЯ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЯреЗрд╕реНрдЯ рд╕рд┐рд╕реНрдЯрдо
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
рдЖрдорддреМрд░ рдкрд░, рдкрд░реАрдХреНрд╖рдг рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЫреЛрдЯреЗ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╕реЗ рдорд┐рд▓рддреЗ-рдЬреБрд▓рддреЗ рд╣реИрдВ (рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА), рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рдЬрд╛рдВрдЪ рдЗрдХрд╛рдИ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреА рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
(method('', true, 1), method("string" , false" , 0))
ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдПрдкреАрдЖрдИ рдореЗрдВ, рдЬрд┐рд╕реЗ рдкрд╛рдВрдЪ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрдирдХреЗ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд╣рдЬрд╛рд░реЛрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЗрдирдкреБрдЯ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдПрдХ рд╡рд┐рдлрд▓рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдпрд╣ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк
рдпрд╣рд╛рдВ рдлрд╝реЗрд╕рд┐рдВрдЧ рдХреЛ рдпрд╛рдж
рдХрд░реЗрдВ )
ред рдпрджрд┐ рдЖрдк рдПрдХ рднреА рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдЗрдирдкреБрдЯ рдХреЗ 1000 рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рдзрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд╣реИред рдХреНрдпрд╛ рд╡рд┐рдзрд┐ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддреА рд╣реИ? рд╕рдВрдкрддреНрддрд┐ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдореЗрдВ, рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓ рдЪреЗрдХреЛрдВ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╣реИ, рдЬреЛ рдХреБрдЫ рдХреАрдбрд╝реЗ рдкрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ рдХреА рд╕рднреА рд╕рдВрднрд╡ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЕрд░реНрдерд╛рддреНредред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ
addNewProduct(id, name, isDiscount)
, рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛, рдЗрд╕реЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдХрдИ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП -
(1, "iPhone", false)
,
(2, "Galaxy", true)
ред рд╕рд╛рдорд╛рдиреНрдп рдкрд░реАрдХреНрд╖рдг рдирд┐рд╖реНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг (рдореЛрдЪрд╛, рдЬреЗрд╕реНрдЯ, рдФрд░ рдЗрд╕реА рддрд░рд╣) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдкрддреНрддрд┐ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЬреИрд╕реЗ
рдЬреЗрдПрд╕-рд╕рддреНрдпрд╛рдкрди рдпрд╛
рдЯреЗрд╕реНрдЯрдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреНрд░рд▓реЗрдЦрди рд╣реИ)ред
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
рдбреЗрд╡рд▓рдкрд░, рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ, рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреЛрдб рдХреЗ рдХреЗрд╡рд▓ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреА рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
рдореЛрдЪрд╛-рдЯреЗрд╕реНрдЯрдЪреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдЗрдирдкреБрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдгред
require('mocha-testcheck').install(); const {expect} = require('chai'); const faker = require('faker'); describe('Product service', () => { describe('Adding new', () => {
тЦН8ред рдЯреЗрд╕реНрдЯ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЖрддреНрдордирд┐рд░реНрднрд░ рд╣реЛрдирд╛, рдмрд╛рд╣рд░реА рдПрдбреНрд╕ рдФрд░ рдЕрдореВрд░реНрдд рдХреЛ рдХрдо рдХрд░рдирд╛
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
рдпрд╣ рд╢рд╛рдпрдж рдЕрдм рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдореИрдВ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реВрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдпрдерд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рджрд▓, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реИред рдЙрд╕рдХреЗ рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдореВрд▓реНрдп рд╕рдордп рдмрд┐рддрд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рдЗрддрдирд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ
рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ: тАЬрдПрдХ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╣реИ, рдФрд░ рдПрдХ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдХреЛрдб рд╣реИтАж рдЬрдм рдЖрдк рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕реЛрдЪреЗрдВ рдХрд┐ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреМрди рджреЗрдЦреЗрдЧрд╛ред рдпрд╣ рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рдЪрд╛рд╣реЗрдЧрд╛ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреВрд░реЗ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдХреЗ рдХреЛрдб рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рдкреЗрдбрд╝ рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝реЗрдВред
рдкрд╛рдардХ рдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ, рд╣реБрдХ рдпрд╛ рдХрд┐рд╕реА рднреА рдмрд╛рд╣рд░реА рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдо рд╕реЗ рдХрдо рдХрд░реЗрдВред рдпрджрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдХреЛрдбрд┐рдВрдЧ рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдмрд╛рд╣рд░реА рд╕рд╣рд╛рдпрдХ рддрдВрддреНрд░ рдкрд░ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреА рд╕рдордЭ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрдВрддреНрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рддреА рд╣реИ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рд╕рдордЭ рдЦреЛ рджреЗрдЧрд╛ред
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
, 4 , 2 , ? ! , , .
. ?
test("When getting orders report, get the existing orders", () => { const queryObject = QueryHelpers.getQueryObject(config.DBInstanceURL); const reportConfiguration = ReportHelpers.getReportConfig();
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
, .
it("When getting orders report, get the existing orders", () => {
тЦН9. :
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
, , , , . . , (
) . тАФ , ( , ). тАФ , , , , . , , . тАФ , , , , ( , , , ).
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
, . . . . , , , .
. , .
before(() => {
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
, , .
it("When updating site name, get successful confirmation", async () => {
тЦН10. , . expect
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
, ,
try-catch-finally
catch
. , , , .
Chai,
expect(method).to.throw
. Jest:
expect(method).toThrow()
. , . , , .
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
, , , .
,
try-catch
.
it("When no product name, it throws error 400", async() => { let errorWeExceptFor = null; try { const result = await addNewProduct({name:'nest'});} catch (error) { expect(error.code).to.equal('InvalidInput'); errorWeExceptFor = error; } expect(errorWeExceptFor).not.to.be.null;
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
expect
, , .
it.only("When no product name, it throws error 400", async() => { expect(addNewProduct)).to.eventually.throw(AppError).with.property('code', "InvalidInput"); });
тЦН11. ,
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
. , (smoke test), -, , . - . , , ,
#cold
,
#api
,
#sanity
. . , Mocha
-g
(
--grep
).
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
, , , , , , . .
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
#cold-test
, . , -, , тАФ .
тЦН12.
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
, Node.js-. , , Node.js .
TDD тАФ , , . , . , ,
Red-Green-Refactor . , - , , , , , . , . ( тАФ , , ).
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
тАФ , . .
2.
тЦН13. ,
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
, , 10 , . , . , . , (, ), , , , ? - ?
, . , 2019 , , TDD, тАФ , . , , ,
. , IoT-, , , - Kafka RabbitMQ, . - , , , . , , , , ? (, , Alexa) , , .
, ( ). , , , , , , . , , - API тАФ Consumer-Driven Contracts . , , , , . , , , , , . , , .
, TDD . , TDD , . , , , .
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
тАФ ( ), .
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
.
.
, , Node.js, .
тЦН14. ,
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
. тАФ . , , . , , - , , - ? , . , : TDD, тАФ .
┬л┬╗. API, - , (, , , , , ). , , , (, ). , , , , , , .
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
, , , , 20.
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
supertest , API, Express, .
API, ExpressтЦН15. , API, Consumer-Driven Contracts
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
, , , , . , , - , , , - . ┬л-22┬╗ : . , , . ,
Consumer-Driven Contracts PACT .
. . PACT , ( ┬л┬╗). , , PACT, , , . , , , , .
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
.
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
Consumer-Driven Contracts, , B , . B .
тЦН16.
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
(middleware) - , , - , Express-. . , , . , , JS-
{req,res}
. , ┬л┬╗ (,
Sinon ) ,
{req,res}
. , , , .
node-mock-http , , , . , , HTTP-, -.
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
Express .
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
Express-.
тЦН17.
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
, , , , , , . , , - . , , , ( , , ), , ( тАФ ) . , :
SonarQube (
2600 GitHub)
Code Climate (
1500 ).
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
, , . . , .
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
Code Climate.
Code ClimateтЦН18. , Node.js
рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ
, , . , , , - , . , - , , , , ? , , ? , API ?
Netflix
- . , , , , . , - тАФ
Chaos Monkey . , , , . Kubernetes тАФ
kube-monkey . , Node.js? , , , V8 1.7 . .
node-chaos , -.
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо
, , , .
рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг
npm-
chaos-monkey , Node.js.
chaos-monkeyрдкрд░рд┐рдгрд╛рдо
, Node.js-. , . .
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! - ?
