рдЬрдм рдореИрдВ рдХреЛрдЯрд▓рд┐рди рдбреАрдПрд╕рдПрд▓ рд╕реЗ рдорд┐рд▓рд╛, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛: рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рдпрд╣ рдЙрддреНрдкрд╛рдж рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рджрдпрд╛ рд╣реИ, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдЖрдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЧрд▓рдд рдерд╛: рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдпреВрдЖрдИ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХреАред

рд╕реЗрд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдФрд░ рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдВрджрд░реНрдн, рддрд╛рдХрд┐ рдЖрдк рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рд╣рдордиреЗ рдХреБрдЫ рдирд┐рд░реНрдгрдп рдХреНрдпреЛрдВ рд▓рд┐рдПред
рд╣рдо рдиреМрдХрд░реА рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реЛрдВ рдФрд░ рдирд┐рдпреЛрдХреНрддрд╛рдУрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ:
- рдирд┐рдпреЛрдХреНрддрд╛ рдЕрдкрдиреА рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ
- рдиреМрдХрд░реА рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ, рдЙрдиреНрд╣реЗрдВ рдкрд╕рдВрджреАрджрд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ, рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬреЗрдВ
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрди рдкрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрди рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдХрд╣реЗрдВрдЧреЗ: "рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдирд┐рдпреЛрдХреНрддрд╛ рдФрд░ рдиреМрдХрд░реА рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реЗ рдмрдирд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред" рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рджреМрд░рд╛рди рд╣рдо рдбреЗрдЯрд╛ рдмрджрд▓рддреЗ рд╣реИрдВ;
- рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред
рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░ рдЬреБрдбрд╝рдирд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ
рдПрдВрдб-рдЯреВ-рдПрдВрдб рдЯреЗрд╕реНрдЯ рдЯреЗрд╕реНрдЯ рдмреЗрдВрдЪ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ рд▓рдЧрднрдЧ рдПрдХ рд╕реИрдиреНрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдирдпрд╛ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЕрдиреБрдХреНрд░рдордг рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд╣реЛрддрд╛ рд╣реИред
рд╕реНрдЯреИрдВрдб рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рд░рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рддреБрд░рдВрдд рдЗрдВрдбреЗрдХреНрд╕ рдХрд░рддреЗ рд╣реИрдВ:
interface TestFixtureUserApi { @POST("fx/employer/create") fun createEmployerUser(@Body employer: TestEmployer): Call<TestEmployer> }
рдлрд┐рдХреНрд╕реНрдЪрд░ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдФрд░ рдХреЗрд╡рд▓ рдЯреЗрд╕реНрдЯ рд╕реНрдЯреИрдВрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд╢реБрд░реБрдЖрддреА рдЧрддрд┐рд╡рд┐рдзрд┐ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреАрдПрд╕рдПрд▓
рддреЛ рд╣рдо рдЬреВрд╣реА рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдБрдЪ рдЧрдПред рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
initialisation{ applicant { resume { title = "Resume for similar Vacancy" isOptional = true resumeStatus = ResumeStatus.APPROVED } resume { title = "Some other Resume" } } employer { vacancy { title = "Resume for similar Vacancy" } vacancy { title = "Resume for similar Vacancy" description = "Working hard" } vacancy { title = "Resume for similar Vacancy" description = "Working very hard" } } }
рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рдмреНрд▓реЙрдХ рдореЗрдВ, рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЗрдХрд╛рдЗрдпрд╛рдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ: рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рджреЛ рд░рд┐рдЬреНрдпреВрдореЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╡реЗрджрдХ рдмрдирд╛рдпрд╛, рд╕рд╛рде рд╣реА рдПрдХ рдирд┐рдпреЛрдХреНрддрд╛ рдЬрд┐рд╕рдиреЗ рдХрдИ рд░рд┐рдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред
рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЗ рдЪреМрд░рд╛рд╣реЗ рд╕реЗ рдЬреБрдбрд╝реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз
рдбреАрдПрд╕рдПрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдореБрдЦреНрдп рд╕реАрдорд╛ рдХреНрдпрд╛ рд╣реИ? рдЗрд╕рдХреА рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХрд╛рд░рдг, рдХрд┐рд╕реА рдкреЗрдбрд╝ рдХреА рд╡рд┐рднрд┐рдиреНрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдмрдирд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд╡реЗрджрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рдЦрдВрдб рд╣реИ "рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд░рд┐рдХреНрддрд┐рдпрд╛рдВ"ред рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд░рд┐рдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
initialisation { applicant { resume { title = "TEST_VACANCY_$uniqueTestId" } } employer { vacancy { title = "TEST_VACANCY_$uniqueTestId" } } }
рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкрд░реАрдХреНрд╖рдг рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд░рд┐рдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рд░рд┐рдХреНрддрд┐рдпрд╛рдВ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреАред
рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рд░рд┐рдХреНрддрд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╣рд░ рдмреНрд▓реЙрдХ рдЗрддрдиреА рдХреЙрдкреА рд╣реИ? рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ! рд╣рдо рд░рд┐рдХреНрддрд┐рдпреЛрдВ рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд┐рдХреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
initialisation { employer { vacancyBlock { size = 10 transformer = { it.also { vacancyDsl -> vacancyDsl.description = "Some description with text ${vacancyDsl.uniqueVacancyId}" } } } } }
рд░рд┐рдХреНрддрд┐ рдмреНрд▓реЙрдХ рдореЗрдВ, рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рд░рд┐рдХреНрддрд┐рдпреЛрдВ рдХреЗ рдХрд┐рддрдиреЗ рдХреНрд▓реЛрди рдмрдирд╛рдиреЗ рд╣реИрдВ рдФрд░ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╕рднреА рдбреЗрдЯрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрд▓рдмреНрдз рд╣реИред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдЖрд╡рд░рдгреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреМрдХрд░реА рдХреЗ рдЖрджреЗрд╢ рд╕рдВрдЦреНрдпрд╛ (рд░рд┐рдХреНрддрд┐рдпрд╛рдВ [0]), рджреЛрдиреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП dsl (рд░рд┐рдХреНрддрд┐рдпреЛрдВ ["рдореЗрд░реА рд░рд┐рдХреНрддрд┐") рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдЯреИрдЧ рджреНрд╡рд╛рд░рд╛, рдФрд░ рд╢реЙрд░реНрдЯрдХрдЯреНрд╕ (рд░рд┐рдХреНрддрд┐рдпреЛрдВ) рд╕реЗ ()
TaggedItemContainer class TaggedItemContainer<T>( private val items: MutableList<TaggedItem<T>> ) { operator fun get(index: Int): T { return items[index].data } operator fun get(tag: String): T { return items.first { it.tag == tag }.data } operator fun plusAssign(item: TaggedItem<T>) { items += item } fun forEach(action: (T) -> Unit) { for (item in items) action.invoke(item.data) } fun first(): T { return items[0].data } fun second(): T { return items[1].data } fun third(): T { return items[2].data } fun last(): T { return items[items.size - 1].data } }
рд▓рдЧрднрдЧ 100% рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкрд╣рд▓реЗ () рдФрд░ рджреВрд╕рд░реЗ () рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╛рдХреА рдХреЛ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд▓рд┐рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рдХрд╛рдХрд╛рдУ рдкрд░ рдЖрд░рдВрднреАрдХрд░рдг рдФрд░ рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
initialisation { applicant { resume { title = "TEST_VACANCY_$uniqueTestId" } } }.run { mainScreen { positionField { click() } jobPositionScreen { positionEntry(vacancies.first().title) } searchButton { click() } } }
рдбреАрдПрд╕рдПрд▓ рдореЗрдВ рдХреНрдпрд╛ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ
рдХреНрдпрд╛ рд╕рднреА рдбреЗрдЯрд╛ рдбреАрдПрд╕рдПрд▓ рдореЗрдВ рдлрд┐рдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп DSL рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рд░рд▓ рд░рдЦрдирд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЖрд╡реЗрджрдХреЛрдВ рдФрд░ рдирд┐рдпреЛрдХреНрддрд╛рдУрдВ рдХрд╛ рдиреМрдХрд░реА рдХреНрд░рдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЙрдирдХреЗ рд╕рдВрдмрдВрдз - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдлрд┐рдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╕рдВрд╕реНрдерд╛рдУрдВ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рджреНрд╡рд╛рд░рд╛ рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреАрдПрд╕рдПрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд▓реЗрдЦ рд╕реЗ рд╕рдордЭрд╛, рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
- рдбреАрдПрд╕рдПрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЖрд░рдВрднреАрдХрд░рдг рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ;
- рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рд░реНрд╡рд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
- рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрддрд┐рдо рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдмреНрд▓реЙрдХ рд╕реЗ рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛
рд╡рд╣рд╛рдВ рдХреИрд╕рд╛ рдЬрд╛рджреВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ? рдЧреМрд░ рдХрд░реЗрдВ рдХрд┐ рд╢реАрд░реНрд╖-рд╕реНрддрд░ TestCaseDsl рддрддреНрд╡ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
@TestCaseDslMarker class TestCaseDsl { val applicants = mutableListOf<ApplicantDsl>() val employers = mutableListOf<EmployerDsl>() val uniqueTestId = CommonUtils.unique fun applicant(block: ApplicantDsl.() -> Unit = {}) { val applicantDsl = ApplicantDsl( uniqueTestId, uniqueApplicantId = CommonUtils.unique applicantDsl.block() applicants += applicantDsl } fun employer(block: EmployerDsl.() -> Unit = {}) { val employerDsl = EmployerDsl( uniqueTestId = uniqueTestId, uniqueEmployerId = CommonUtils.unique employerDsl.block() employers += employerDsl } }
рдЖрд╡реЗрджрдХ рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо applicantDsl рдмрдирд╛рддреЗ рд╣реИрдВред
ApplicantDsl @TestCaseDslMarker class ApplicantDsl( val uniqueTestId: String, val uniqueApplicantId: String, var tag: String? = null, var login: String? = null, var password: String? = null, var firstName: String? = null, var middleName: String? = null, var lastName: String? = null, var email: String? = null, var siteId: Int? = null, var areaId: Int? = null, var resumeViewLimit: Int? = null, var isMailingSubscription: Boolean? = null ) { val resumes = mutableListOf<ResumeDsl>() fun resume(block: ResumeDsl.() -> Unit = {}) { val resumeDslBuilder = ResumeDsl( uniqueTestId = uniqueTestId, uniqueApplicantId = uniqueApplicantId, uniqueResumeId = CommonUtils.unique ) resumeDslBuilder.apply(block) this.resumes += resumeDslBuilder } }
рдлрд┐рд░ рд╣рдо рдмреНрд▓реЙрдХ рдмреНрд▓реЙрдХ рд╕реЗ рдЙрд╕ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ: рдЖрд╡реЗрджрдХ рдбреАрдПрд╕рдПрд▓ () -> рдпреВрдирд┐рдЯред рдпрд╣ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдорд╛рд░реЗ рдбреАрдПрд╕рдПрд▓ рдореЗрдВ рдЖрд╡реЗрджрдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмреНрд▓реЙрдХ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рдпреВрдирд┐рдХрдЯреЗрд╕реНрдЯреА рдФрд░ рдпреВрдиреАрдХрдРрдкреНрд▓реАрдХреЗрдВрдЯрдЖрдИрдбреА (рдЖрдкрд╕ рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрдЯ рд╣реИрдВ рдФрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИ:
fun initialisation(block: TestCaseDsl.() -> Unit): Initialisation { val testCaseDsl = TestCaseDsl().apply(block) val testCase = TestCaseCreator.create(testCaseDsl) return Initialisation(testCase) }
рд╣рдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕ рдкрд░ рдмреНрд▓реЙрдХ рдПрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕рд░реНрд╡рд░ рдкрд░ рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП TestCaseCreator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред TestCaseCreator.create () рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рд╣рдо рдбреЗрдЯрд╛ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдмрдирд╛рддреЗ рд╣реИрдВред
рдиреБрдХрд╕рд╛рди рдФрд░ рд╡рд┐рдЪрд╛рд░
рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдФрд░ рдЙрдирдХреЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рд░рд┐рдХреНрддрд┐ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдореБрджреНрд░рд╛рдУрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕реЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдереЗ, рдФрд░ рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдбреАрдПрд╕рдПрд▓ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛
DSL рд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рджрд┐рдиреЛрдВ рдореЗрдВ, рд╣рдордиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдбреЗрдЯрд╛ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛, рдФрд░ рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдПрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдФрд░ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдмреНрд▓реЙрдХ рдореЗрдВ рдмрдирд╛рдпрд╛ред
рдРрд╕рд╛ рди рдХрд░реЗрдВ - рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЧрд┐рд░ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЧрд┐рд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рджреМрд░рд╛рди, рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рдореЗрдВ рдПрдХ рд░рд┐рдХреНрддрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░, рдЬрдм рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╕рдВрджреАрджрд╛ рд╕реВрдЪреА рд╕реЗ рд░рд┐рдХреНрддрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд рддрд╛рд░рд╛рдВрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рдПрдХ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдо рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдо
рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рдпрд╛:
рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╕рд░реНрд╡рд░ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ;
рд╕рд░реНрд╡рд░ рдкрд░ рд╕реЗрдЯ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЗрдХрд╛рдЗрдпрд╛рдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрдИрдбреАрдИ рд╕рдВрдХреЗрдд рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ;
рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдФрд░ рдХрдореНрдпреВрдирд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реИред
рд╕рдВрдмрдВрдзрд┐рдд рд╕рд╛рдордЧреНрд░реА
рдпрджрд┐ рдЖрдк UI рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВ:
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ
рдпрд╣ рд▓реЗрдЦ Android рдореЗрдВ UI рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдирдП рд╣рд┐рд╕реНрд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдЬреЛрдбрд╝ рджреВрдВрдЧрд╛ред