├── .github └── workflows │ └── test.yml ├── 11-testing-problems ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ └── webpack.prod.conf.js ├── circle.yml ├── config │ ├── dev.env.js │ ├── index.js │ └── prod.env.js ├── index.html ├── package-lock.json ├── package.json ├── src │ ├── App.vue │ ├── components │ │ ├── List.vue │ │ ├── Message.js │ │ ├── MessageToggle.vue │ │ └── Page.vue │ ├── main.js │ └── router │ │ └── index.js ├── test │ ├── .eslintrc │ └── specs │ │ ├── List.spec.js │ │ ├── Message.spec.js │ │ ├── MessageToggle.spec.js │ │ └── __snapshots__ │ │ └── List.spec.js.snap └── yarn.lock ├── 12-first-test ├── .eslintcache ├── .gitignore ├── README.md ├── jest.config.js ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt ├── src │ ├── App.css │ ├── App.js │ ├── components │ │ ├── Form.js │ │ └── Posts.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── reportWebVitals.js │ ├── setupTests.js │ └── tests │ │ ├── 01-Form.test.js │ │ └── 02-FormUserEvent.test.js └── yarn.lock ├── 21-frameworks ├── angular │ ├── .browserslistrc │ ├── .editorconfig │ ├── .gitignore │ ├── README.md │ ├── angular.json │ ├── e2e │ │ ├── protractor.conf.js │ │ ├── src │ │ │ ├── app.e2e-spec.ts │ │ │ └── app.po.ts │ │ └── tsconfig.json │ ├── jest-global-mocks.ts │ ├── jest.config.js │ ├── karma.conf.js │ ├── package-lock.json │ ├── package.json │ ├── setup-jest.ts │ ├── src │ │ ├── app │ │ │ ├── app.component.css │ │ │ ├── app.component.ts │ │ │ ├── app.module.ts │ │ │ ├── components │ │ │ │ ├── form.component.ts │ │ │ │ └── posts.component.ts │ │ │ └── test │ │ │ │ └── form.component.spec.ts │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── karmaTest.ts │ │ ├── main.ts │ │ ├── polyfills.ts │ │ └── styles.css │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.spec.json │ └── tslint.json ├── react │ ├── .gitignore │ ├── README.md │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── logo192.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ └── robots.txt │ ├── src │ │ ├── App.css │ │ ├── App.js │ │ ├── components │ │ │ ├── Form.js │ │ │ └── Posts.js │ │ ├── index.css │ │ ├── index.js │ │ ├── logo.svg │ │ ├── reportWebVitals.js │ │ ├── setupTests.js │ │ └── test │ │ │ └── Form.test.js │ └── yarn.lock └── vue │ ├── .browserslistrc │ ├── .eslintrc.js │ ├── .gitignore │ ├── README.md │ ├── babel.config.js │ ├── jest.config.js │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── favicon.ico │ └── index.html │ └── src │ ├── App.vue │ ├── assets │ └── logo.png │ ├── components │ ├── Form.vue │ └── Posts.vue │ ├── main.js │ └── test │ └── Form.spec.js ├── 22-unit-test ├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── README.md ├── babel.config.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── cursos │ │ ├── bash.jpg │ │ ├── buenas-practicas-bdd-cucumber-behat.jpg │ │ ├── comunicacion-microservicios.jpg │ │ ├── cqrs-event-sourcing-kotlin-axon-framework.jpg │ │ ├── css-layouts-bg.png │ │ ├── css-layouts.jpg │ │ ├── curso-agile-retrospectivas.jpg │ │ ├── curso-api-http-scala.jpg │ │ ├── curso-app-mean-webpack.jpg │ │ ├── curso-app-vuejs-jest.jpg │ │ ├── curso-arquitectura-hexagonal.jpg │ │ ├── curso-aws-ec2.jpg │ │ ├── curso-aws-escalando-apps.jpg │ │ ├── curso-cqrs.jpg │ │ ├── curso-introduccion-scala.jpg │ │ ├── curso-screenshot-testing-android.jpg │ │ ├── curso-screenshot-testing-ios.jpg │ │ ├── curso-ui-testing-android.jpg │ │ ├── curso-ui-testing-ios.jpg │ │ ├── ddd-en-php.jpg │ │ ├── ddd-java.jpg │ │ ├── docker-desde-0.jpg │ │ ├── domain-driven-design.jpg │ │ ├── dotfiles.jpg │ │ ├── elastic-stack.jpg │ │ ├── git-introduccion-trabajo-en-equipo.jpg │ │ ├── github-actions-automatizacion.jpg │ │ ├── github-actions-integracion-continua.jpg │ │ ├── go-primera-app.jpg │ │ ├── intellij.jpg │ │ ├── iterm-productividad.jpg │ │ ├── kubernetes-para-desarrolladores.jpg │ │ ├── makefiles.jpg │ │ ├── migracion-vuejs.jpg │ │ ├── notion.jpg │ │ ├── programacion-funcional-refactor-typeclasses.jpg │ │ ├── prometheus.jpg │ │ ├── reactjs-de-0-a-deploy.jpg │ │ ├── solid.jpg │ │ ├── terminal-zsh.jpg │ │ ├── testing-introduccion-buenas-practicas.jpg │ │ ├── testing-vuex.jpg │ │ └── vistas-android.jpg │ ├── favicon.ico │ └── index.html └── src │ ├── App.vue │ ├── components │ ├── CourseCard.vue │ └── CourseCollection.vue │ ├── main.js │ ├── services │ ├── CoursesRepository.js │ └── courses.json │ ├── test │ └── Courses.spec.js │ └── views │ └── HomeView.vue ├── 31-testing-important-stuff ├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── README.md ├── babel.config.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ └── index.html └── src │ ├── App.vue │ ├── assets │ └── logo.png │ ├── components │ ├── ErrorMessage.vue │ └── ErrorToggle.vue │ ├── main.js │ ├── pageobjects │ └── ErrorPageObject.js │ └── test │ ├── 01-ErrorToggle.spec.js │ ├── 02-ErrorToggleNoShallow.spec.js │ └── 03-ErrorTogglePageObject.spec.js ├── 32-testing-as-a-user ├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── README.md ├── babel.config.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ └── index.html └── src │ ├── App.vue │ ├── assets │ └── logo.png │ ├── components │ ├── ErrorMessage.vue │ └── ErrorToggle.vue │ ├── main.js │ ├── pageobjects │ └── ErrorPageObject.js │ └── test │ ├── 00-ErrorToggleNoShallow.spec.js │ ├── 01-ErrorToggleTestingLibrary.spec.js │ └── 02-ErrorToggleTestingLibraryPageObject.spec.js ├── 34-semantic-tests ├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── README.md ├── babel.config.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ └── index.html └── src │ ├── App.vue │ ├── assets │ └── logo.png │ ├── components │ ├── ErrorMessage.vue │ └── ErrorToggle.vue │ ├── main.js │ └── test │ ├── 01-ErrorToggleTestingLibrary.spec.js │ └── 02-ErrorToggleJestDOM.spec.js ├── 41-a11y-axe ├── angular │ ├── .browserslistrc │ ├── .editorconfig │ ├── .gitignore │ ├── .npmrc │ ├── README.md │ ├── angular.json │ ├── example-app │ │ ├── app │ │ │ ├── app.component.css │ │ │ ├── app.component.html │ │ │ ├── app.component.ts │ │ │ ├── app.module.ts │ │ │ ├── components │ │ │ │ ├── create-profile.component.ts │ │ │ │ ├── form.component.ts │ │ │ │ └── success-message.component.ts │ │ │ ├── material.module.ts │ │ │ └── test │ │ │ │ ├── 00-create-profile-A11y.component.spec.ts │ │ │ │ └── 01-create-profile.component.spec.ts │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── jest.config.js │ │ ├── main.ts │ │ ├── polyfills.ts │ │ ├── styles.css │ │ ├── test-setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── tslint.json │ ├── jest.config.js │ ├── jest.preset.js │ ├── nx.json │ ├── package.json │ ├── prettier.config.js │ ├── release.config.js │ ├── tsconfig.json │ ├── tslint.json │ └── yarn.lock └── react │ ├── .gitignore │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt │ ├── src │ ├── App.css │ ├── App.js │ ├── components │ │ ├── CreateProfile.js │ │ ├── Form.js │ │ └── SuccessMessage.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── reportWebVitals.js │ ├── services │ │ └── userRepository.js │ ├── setupTests.js │ └── test │ │ ├── 00-CreateProfileA11y.test.js │ │ └── 01-CreateProfile.test.js │ └── yarn.lock ├── 42-a11y-selectors ├── angular │ ├── .browserslistrc │ ├── .editorconfig │ ├── .gitignore │ ├── .npmrc │ ├── README.md │ ├── angular.json │ ├── example-app │ │ ├── app │ │ │ ├── app.component.css │ │ │ ├── app.component.html │ │ │ ├── app.component.ts │ │ │ ├── app.module.ts │ │ │ ├── components │ │ │ │ ├── create-profile.component.ts │ │ │ │ ├── form.component.ts │ │ │ │ └── success-message.component.ts │ │ │ ├── material.module.ts │ │ │ └── test │ │ │ │ └── 01-create-profile.component.spec.ts │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── jest.config.js │ │ ├── main.ts │ │ ├── polyfills.ts │ │ ├── styles.css │ │ ├── test-setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── tslint.json │ ├── jest.config.js │ ├── jest.preset.js │ ├── nx.json │ ├── package.json │ ├── prettier.config.js │ ├── release.config.js │ ├── tsconfig.json │ ├── tslint.json │ └── yarn.lock └── react │ ├── .eslintcache │ ├── .gitignore │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt │ ├── src │ ├── App.css │ ├── App.js │ ├── components │ │ ├── CreateProfile.js │ │ ├── Form.js │ │ └── SuccessMessage.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── reportWebVitals.js │ ├── services │ │ └── userRepository.js │ ├── setupTests.js │ └── test │ │ └── 01-CreateProfile.test.js │ └── yarn.lock ├── 51-test-structure ├── .eslintcache ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt ├── src │ ├── App.css │ ├── App.js │ ├── components │ │ ├── CreateProfile.js │ │ ├── Form.js │ │ └── SuccessMessage.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── reportWebVitals.js │ ├── services │ │ └── userRepository.js │ ├── setupTests.js │ └── test │ │ ├── 01-CreateProfile.test.js │ │ └── 02-CreateProfile.test.js └── yarn.lock ├── 52-test-description ├── .eslintcache ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt ├── src │ ├── App.css │ ├── App.js │ ├── components │ │ ├── CreateProfile.js │ │ ├── Form.js │ │ └── SuccessMessage.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── reportWebVitals.js │ ├── services │ │ └── userRepository.js │ ├── setupTests.js │ └── test │ │ ├── 01-CreateProfile.test.js │ │ └── 02-CreateProfile.test.js └── yarn.lock ├── 61-mocking ├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── README.md ├── babel.config.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── cursos │ │ ├── bash.jpg │ │ ├── buenas-practicas-bdd-cucumber-behat.jpg │ │ ├── comunicacion-microservicios.jpg │ │ ├── cqrs-event-sourcing-kotlin-axon-framework.jpg │ │ ├── css-layouts-bg.png │ │ ├── css-layouts.jpg │ │ ├── curso-agile-retrospectivas.jpg │ │ ├── curso-api-http-scala.jpg │ │ ├── curso-app-mean-webpack.jpg │ │ ├── curso-app-vuejs-jest.jpg │ │ ├── curso-arquitectura-hexagonal.jpg │ │ ├── curso-aws-ec2.jpg │ │ ├── curso-aws-escalando-apps.jpg │ │ ├── curso-cqrs.jpg │ │ ├── curso-introduccion-scala.jpg │ │ ├── curso-screenshot-testing-android.jpg │ │ ├── curso-screenshot-testing-ios.jpg │ │ ├── curso-ui-testing-android.jpg │ │ ├── curso-ui-testing-ios.jpg │ │ ├── ddd-en-php.jpg │ │ ├── ddd-java.jpg │ │ ├── docker-desde-0.jpg │ │ ├── domain-driven-design.jpg │ │ ├── dotfiles.jpg │ │ ├── elastic-stack.jpg │ │ ├── git-introduccion-trabajo-en-equipo.jpg │ │ ├── github-actions-automatizacion.jpg │ │ ├── github-actions-integracion-continua.jpg │ │ ├── go-primera-app.jpg │ │ ├── intellij.jpg │ │ ├── iterm-productividad.jpg │ │ ├── kubernetes-para-desarrolladores.jpg │ │ ├── makefiles.jpg │ │ ├── migracion-vuejs.jpg │ │ ├── notion.jpg │ │ ├── programacion-funcional-refactor-typeclasses.jpg │ │ ├── prometheus.jpg │ │ ├── reactjs-de-0-a-deploy.jpg │ │ ├── solid.jpg │ │ ├── terminal-zsh.jpg │ │ ├── testing-introduccion-buenas-practicas.jpg │ │ ├── testing-vuex.jpg │ │ └── vistas-android.jpg │ ├── favicon.ico │ └── index.html └── src │ ├── App.vue │ ├── components │ ├── CourseCard.vue │ └── CourseCollection.vue │ ├── main.js │ ├── services │ ├── CoursesRepository.js │ ├── courses.json │ └── timeService.js │ ├── test │ └── Courses.spec.js │ └── views │ └── HomeView.vue ├── 62-mocking-fetch ├── .eslintcache ├── .gitignore ├── README.md ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt ├── src │ ├── Home.js │ ├── components │ │ ├── Form.js │ │ ├── Posts.js │ │ └── PostsWithService.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── mocks │ │ ├── handlers.js │ │ └── server.js │ ├── reportWebVitals.js │ ├── services │ │ └── postsRepository.js │ ├── setupTests.js │ └── tests │ │ ├── 01-Posts.test.js │ │ ├── 02-PostsMSW.test.js │ │ └── 03-PostsWithService.test.js └── yarn.lock ├── 63-animations ├── css-transition │ ├── .browserslistrc │ ├── .eslintrc.js │ ├── .gitignore │ ├── .prettierrc │ ├── README.md │ ├── babel.config.js │ ├── jest.config.js │ ├── package-lock.json │ ├── package.json │ ├── public │ │ ├── cursos │ │ │ ├── bash.jpg │ │ │ ├── buenas-practicas-bdd-cucumber-behat.jpg │ │ │ ├── comunicacion-microservicios.jpg │ │ │ ├── cqrs-event-sourcing-kotlin-axon-framework.jpg │ │ │ ├── css-layouts-bg.png │ │ │ ├── css-layouts.jpg │ │ │ ├── curso-agile-retrospectivas.jpg │ │ │ ├── curso-api-http-scala.jpg │ │ │ ├── curso-app-mean-webpack.jpg │ │ │ ├── curso-app-vuejs-jest.jpg │ │ │ ├── curso-arquitectura-hexagonal.jpg │ │ │ ├── curso-aws-ec2.jpg │ │ │ ├── curso-aws-escalando-apps.jpg │ │ │ ├── curso-cqrs.jpg │ │ │ ├── curso-introduccion-scala.jpg │ │ │ ├── curso-screenshot-testing-android.jpg │ │ │ ├── curso-screenshot-testing-ios.jpg │ │ │ ├── curso-ui-testing-android.jpg │ │ │ ├── curso-ui-testing-ios.jpg │ │ │ ├── ddd-en-php.jpg │ │ │ ├── ddd-java.jpg │ │ │ ├── docker-desde-0.jpg │ │ │ ├── domain-driven-design.jpg │ │ │ ├── dotfiles.jpg │ │ │ ├── elastic-stack.jpg │ │ │ ├── git-introduccion-trabajo-en-equipo.jpg │ │ │ ├── github-actions-automatizacion.jpg │ │ │ ├── github-actions-integracion-continua.jpg │ │ │ ├── go-primera-app.jpg │ │ │ ├── intellij.jpg │ │ │ ├── iterm-productividad.jpg │ │ │ ├── kubernetes-para-desarrolladores.jpg │ │ │ ├── makefiles.jpg │ │ │ ├── migracion-vuejs.jpg │ │ │ ├── notion.jpg │ │ │ ├── programacion-funcional-refactor-typeclasses.jpg │ │ │ ├── prometheus.jpg │ │ │ ├── reactjs-de-0-a-deploy.jpg │ │ │ ├── solid.jpg │ │ │ ├── terminal-zsh.jpg │ │ │ ├── testing-introduccion-buenas-practicas.jpg │ │ │ ├── testing-vuex.jpg │ │ │ └── vistas-android.jpg │ │ ├── favicon.ico │ │ └── index.html │ └── src │ │ ├── App.vue │ │ ├── components │ │ └── Post.vue │ │ ├── main.js │ │ └── test │ │ └── Post.spec.js └── time-scale │ ├── .eslintcache │ ├── .gitignore │ ├── README.md │ ├── jest.config.js │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt │ └── src │ ├── App.css │ ├── App.js │ ├── components │ ├── PostTransition.js │ └── styles.css │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── reportWebVitals.js │ ├── setupTests.js │ └── tests │ └── 01-PostTransition.test.js ├── 71-custom-renderers ├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── README.md ├── babel.config.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ └── index.html └── src │ ├── App.vue │ ├── assets │ └── logo.png │ ├── components │ ├── Comment.vue │ ├── Comments.vue │ ├── Header.vue │ ├── Login.vue │ └── NewCommentForm.vue │ ├── i18n │ ├── en.js │ └── es.js │ ├── main.js │ ├── services │ ├── commentsRepository.js │ └── userRepository.js │ ├── store │ └── index.js │ └── test │ ├── 00-Comments.spec.js │ ├── 00-Login.spec.js │ ├── 01-Comments-Renderer.spec.js │ ├── 02-Comments-RendererFromFile.spec.js │ ├── 02-Login.spec.js │ ├── 03-Header-i18n.spec.js │ └── test-utils.js ├── 72-test-object-factory ├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── README.md ├── babel.config.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ └── index.html └── src │ ├── App.vue │ ├── assets │ └── logo.png │ ├── components │ ├── Comment.vue │ ├── Comments.vue │ ├── Login.vue │ └── NewCommentForm.vue │ ├── main.js │ ├── services │ ├── commentsRepository.js │ └── userRepository.js │ ├── store │ └── index.js │ └── test │ ├── 00-Comments.spec.js │ ├── 00-Login.spec.js │ ├── 01-CommentsWithFactory.spec.js │ ├── 01-LoginWithFactory.spec.js │ ├── factories │ ├── comment.js │ └── user.js │ └── test-utils.js ├── 73-snapshots ├── .browserslistrc ├── .editorconfig ├── .gitignore ├── .npmrc ├── README.md ├── angular.json ├── example-app │ ├── app │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── components │ │ │ ├── comment.component.ts │ │ │ └── comments.component.ts │ │ ├── material.module.ts │ │ ├── models │ │ │ ├── comment.model.ts │ │ │ └── user.model.ts │ │ ├── services │ │ │ └── CommentRepository.service.ts │ │ └── test │ │ │ ├── 01-comment-snapshot.component.spec.ts │ │ │ ├── 02-comments-snapshot.component.spec.ts │ │ │ ├── 03-comments.component.spec.ts │ │ │ └── factories │ │ │ ├── comment.ts │ │ │ └── user.ts │ ├── assets │ │ └── .gitkeep │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── jest.config.js │ ├── main.ts │ ├── polyfills.ts │ ├── styles.css │ ├── test-setup.ts │ ├── tsconfig.json │ ├── tsconfig.spec.json │ └── tslint.json ├── jest.config.js ├── jest.preset.js ├── nx.json ├── package.json ├── prettier.config.js ├── release.config.js ├── tsconfig.json ├── tslint.json └── yarn.lock ├── 82-TDD ├── .browserslistrc ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── README.md ├── babel.config.js ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── cursos │ │ ├── bash.jpg │ │ ├── buenas-practicas-bdd-cucumber-behat.jpg │ │ ├── comunicacion-microservicios.jpg │ │ ├── cqrs-event-sourcing-kotlin-axon-framework.jpg │ │ ├── css-layouts-bg.png │ │ ├── css-layouts.jpg │ │ ├── curso-agile-retrospectivas.jpg │ │ ├── curso-api-http-scala.jpg │ │ ├── curso-app-mean-webpack.jpg │ │ ├── curso-app-vuejs-jest.jpg │ │ ├── curso-arquitectura-hexagonal.jpg │ │ ├── curso-aws-ec2.jpg │ │ ├── curso-aws-escalando-apps.jpg │ │ ├── curso-cqrs.jpg │ │ ├── curso-introduccion-scala.jpg │ │ ├── curso-screenshot-testing-android.jpg │ │ ├── curso-screenshot-testing-ios.jpg │ │ ├── curso-ui-testing-android.jpg │ │ ├── curso-ui-testing-ios.jpg │ │ ├── ddd-en-php.jpg │ │ ├── ddd-java.jpg │ │ ├── docker-desde-0.jpg │ │ ├── domain-driven-design.jpg │ │ ├── dotfiles.jpg │ │ ├── elastic-stack.jpg │ │ ├── git-introduccion-trabajo-en-equipo.jpg │ │ ├── github-actions-automatizacion.jpg │ │ ├── github-actions-integracion-continua.jpg │ │ ├── go-primera-app.jpg │ │ ├── intellij.jpg │ │ ├── iterm-productividad.jpg │ │ ├── kubernetes-para-desarrolladores.jpg │ │ ├── makefiles.jpg │ │ ├── migracion-vuejs.jpg │ │ ├── notion.jpg │ │ ├── programacion-funcional-refactor-typeclasses.jpg │ │ ├── prometheus.jpg │ │ ├── reactjs-de-0-a-deploy.jpg │ │ ├── solid.jpg │ │ ├── terminal-zsh.jpg │ │ ├── testing-introduccion-buenas-practicas.jpg │ │ ├── testing-vuex.jpg │ │ └── vistas-android.jpg │ ├── favicon.ico │ └── index.html └── src │ ├── App.vue │ ├── components │ ├── Article.vue │ ├── ArticleContent.vue │ ├── Comment.vue │ └── Comments.vue │ ├── main.js │ ├── services │ ├── articlesRepository.js │ └── commentsRepository.js │ ├── test │ ├── Article.spec.js │ └── factories │ │ ├── article.js │ │ └── comment.js │ └── views │ └── ArticleView.vue ├── 91-ci ├── .eslintcache ├── .gitignore ├── README.md ├── jest.config.js ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt ├── src │ ├── Home.js │ ├── components │ │ ├── Form.js │ │ └── Posts.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── reportWebVitals.js │ ├── services │ │ └── postsRepository.js │ ├── setupTests.js │ └── tests │ │ └── Posts.test.js └── yarn.lock ├── Q&A ├── vanilla-js │ ├── .eslintrc │ ├── .github │ │ └── workflows │ │ │ ├── lint.yml │ │ │ └── test.yml │ ├── .gitignore │ ├── .prettierrc │ ├── LICENSE │ ├── README.md │ ├── babel.config.json │ ├── cypress.json │ ├── index.html │ ├── jest.config.js │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── assets │ │ │ ├── css │ │ │ │ └── normalize.css │ │ │ └── images │ │ │ │ └── logo-codelytv-light.png │ │ ├── index.js │ │ └── users.js │ ├── tests │ │ ├── .eslintrc │ │ └── users.spec.js │ ├── webpack.common.js │ ├── webpack.dev.js │ └── webpack.prod.js └── vuetify-example │ ├── .browserslistrc │ ├── .eslintrc.js │ ├── .gitignore │ ├── README.md │ ├── babel.config.js │ ├── jest.config.js │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── favicon.ico │ └── index.html │ ├── src │ ├── App.vue │ ├── assets │ │ ├── logo.png │ │ └── logo.svg │ ├── components │ │ └── StateForm.vue │ ├── main.js │ └── plugins │ │ └── vuetify.js │ ├── tests │ └── unit │ │ ├── StateForm.spec.js │ │ └── test-utils.js │ └── vue.config.js └── README.md /11-testing-problems/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"] 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /11-testing-problems/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /11-testing-problems/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /11-testing-problems/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | *.suo 11 | *.ntvs* 12 | *.njsproj 13 | *.sln 14 | -------------------------------------------------------------------------------- /11-testing-problems/build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require("eventsource-polyfill"); 3 | var hotClient = require("webpack-hot-middleware/client?noInfo=true&reload=true"); 4 | 5 | hotClient.subscribe(function(event) { 6 | if (event.action === "reload") { 7 | window.location.reload(); 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /11-testing-problems/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require("./utils"); 2 | var config = require("../config"); 3 | var isProduction = process.env.NODE_ENV === "production"; 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }), 12 | transformToRequire: { 13 | video: "src", 14 | source: "src", 15 | img: "src", 16 | image: "xlink:href" 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /11-testing-problems/circle.yml: -------------------------------------------------------------------------------- 1 | machine: 2 | node: 3 | version: 6 4 | -------------------------------------------------------------------------------- /11-testing-problems/config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require("webpack-merge"); 2 | var prodEnv = require("./prod.env"); 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }); 7 | -------------------------------------------------------------------------------- /11-testing-problems/config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | }; 4 | -------------------------------------------------------------------------------- /11-testing-problems/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | vue-test-utils-jest-example 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /11-testing-problems/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /11-testing-problems/src/components/List.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 15 | -------------------------------------------------------------------------------- /11-testing-problems/src/components/Message.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "message", 3 | functional: true, 4 | props: ["msg"], 5 | render: (h, { props }) => h("h1", props.msg || "default message") 6 | }; 7 | -------------------------------------------------------------------------------- /11-testing-problems/src/components/MessageToggle.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 28 | -------------------------------------------------------------------------------- /11-testing-problems/src/components/Page.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 20 | -------------------------------------------------------------------------------- /11-testing-problems/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from "vue"; 4 | import App from "./App"; 5 | import router from "./router"; 6 | 7 | Vue.config.productionTip = false; 8 | 9 | /* eslint-disable no-new */ 10 | new Vue({ 11 | el: "#app", 12 | router, 13 | template: "", 14 | components: { App } 15 | }); 16 | -------------------------------------------------------------------------------- /11-testing-problems/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Router from "vue-router"; 3 | import Page from "@/components/Page"; 4 | 5 | Vue.use(Router); 6 | 7 | export default new Router({ 8 | routes: [ 9 | { 10 | path: "/", 11 | name: "Page", 12 | component: Page 13 | } 14 | ] 15 | }); 16 | -------------------------------------------------------------------------------- /11-testing-problems/test/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "expect": true, 7 | "sinon": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /11-testing-problems/test/specs/Message.spec.js: -------------------------------------------------------------------------------- 1 | import { shallowMount } from "@vue/test-utils"; 2 | import Message from "@/components/Message"; 3 | 4 | describe("Message.vue", () => { 5 | it("renders props.msg when passed", () => { 6 | const msg = "new message"; 7 | const wrapper = shallowMount(Message, { 8 | context: { props: { msg } }, 9 | }); 10 | expect(wrapper.text()).toBe(msg); 11 | }); 12 | 13 | it("renders default message if not passed a prop", () => { 14 | const defaultMessage = "default message"; 15 | const wrapper = shallowMount(Message, { context: {} }); 16 | expect(wrapper.text()).toBe(defaultMessage); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /11-testing-problems/test/specs/__snapshots__/List.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`List.vue matches snapshot 1`] = ` 4 | 12 | `; 13 | -------------------------------------------------------------------------------- /12-first-test/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /12-first-test/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testMatch: ["**/*.test.js"], 3 | }; 4 | -------------------------------------------------------------------------------- /12-first-test/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/12-first-test/public/favicon.ico -------------------------------------------------------------------------------- /12-first-test/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/12-first-test/public/logo192.png -------------------------------------------------------------------------------- /12-first-test/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/12-first-test/public/logo512.png -------------------------------------------------------------------------------- /12-first-test/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /12-first-test/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /12-first-test/src/App.js: -------------------------------------------------------------------------------- 1 | import "./App.css"; 2 | import Posts from "./components/Posts"; 3 | 4 | function App() { 5 | return ( 6 |
7 | 8 |
9 | ); 10 | } 11 | 12 | export default App; 13 | -------------------------------------------------------------------------------- /12-first-test/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /12-first-test/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /12-first-test/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /12-first-test/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /21-frameworks/angular/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /21-frameworks/angular/e2e/src/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | async navigateTo(): Promise { 5 | return browser.get(browser.baseUrl); 6 | } 7 | 8 | async getTitleText(): Promise { 9 | return element(by.css('app-root .content span')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /21-frameworks/angular/e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "../tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "../out-tsc/e2e", 6 | "module": "commonjs", 7 | "target": "es2018", 8 | "types": [ 9 | "jasmine", 10 | "node" 11 | ] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /21-frameworks/angular/jest.config.js: -------------------------------------------------------------------------------- 1 | // require("jest-preset-angular/ngcc-jest-processor"); 2 | 3 | module.exports = { 4 | preset: "jest-preset-angular", 5 | setupFilesAfterEnv: ["/setup-jest.ts"], 6 | }; 7 | -------------------------------------------------------------------------------- /21-frameworks/angular/setup-jest.ts: -------------------------------------------------------------------------------- 1 | import "jest-preset-angular"; 2 | import "./jest-global-mocks"; // browser mocks globally available for every test 3 | -------------------------------------------------------------------------------- /21-frameworks/angular/src/app/app.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/angular/src/app/app.component.css -------------------------------------------------------------------------------- /21-frameworks/angular/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | styleUrls: ['./app.component.css'], 6 | template: ` 7 |
8 | 9 |
10 | `, 11 | }) 12 | export class AppComponent { 13 | title = 'angular'; 14 | } 15 | -------------------------------------------------------------------------------- /21-frameworks/angular/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { NgModule } from '@angular/core'; 3 | 4 | import { AppComponent } from './app.component'; 5 | import { PostsComponent } from './components/posts.component'; 6 | import { FormComponent } from './components/form.component'; 7 | 8 | @NgModule({ 9 | declarations: [ 10 | AppComponent, 11 | PostsComponent, 12 | FormComponent 13 | ], 14 | imports: [ 15 | BrowserModule 16 | ], 17 | providers: [], 18 | bootstrap: [AppComponent] 19 | }) 20 | export class AppModule { } 21 | -------------------------------------------------------------------------------- /21-frameworks/angular/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/angular/src/assets/.gitkeep -------------------------------------------------------------------------------- /21-frameworks/angular/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /21-frameworks/angular/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/angular/src/favicon.ico -------------------------------------------------------------------------------- /21-frameworks/angular/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Angular 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /21-frameworks/angular/src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.error(err)); 13 | -------------------------------------------------------------------------------- /21-frameworks/angular/src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | -------------------------------------------------------------------------------- /21-frameworks/angular/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": [ 9 | "src/main.ts", 10 | "src/polyfills.ts" 11 | ], 12 | "include": [ 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /21-frameworks/angular/tsconfig.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "compileOnSave": false, 4 | "compilerOptions": { 5 | "baseUrl": "./", 6 | "outDir": "./dist/out-tsc", 7 | "sourceMap": true, 8 | "declaration": false, 9 | "downlevelIteration": true, 10 | "experimentalDecorators": true, 11 | "moduleResolution": "node", 12 | "importHelpers": true, 13 | "target": "es2015", 14 | "module": "es2020", 15 | "lib": [ 16 | "es2018", 17 | "dom" 18 | ] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /21-frameworks/angular/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "types": [ 7 | "jest" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "src/**/*.spec.ts", 16 | "src/**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /21-frameworks/react/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /21-frameworks/react/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/react/public/favicon.ico -------------------------------------------------------------------------------- /21-frameworks/react/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/react/public/logo192.png -------------------------------------------------------------------------------- /21-frameworks/react/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/react/public/logo512.png -------------------------------------------------------------------------------- /21-frameworks/react/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /21-frameworks/react/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /21-frameworks/react/src/App.js: -------------------------------------------------------------------------------- 1 | import "./App.css"; 2 | import Posts from "./components/Posts"; 3 | 4 | function App() { 5 | return ( 6 |
7 | 8 |
9 | ); 10 | } 11 | 12 | export default App; 13 | -------------------------------------------------------------------------------- /21-frameworks/react/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /21-frameworks/react/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /21-frameworks/react/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /21-frameworks/react/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /21-frameworks/vue/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /21-frameworks/vue/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | extends: ["plugin:vue/vue3-essential", "eslint:recommended", "@vue/prettier"], 7 | parserOptions: { 8 | parser: "babel-eslint" 9 | }, 10 | rules: { 11 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", 12 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off" 13 | }, 14 | overrides: [ 15 | { 16 | files: [ 17 | "**/__tests__/*.{j,t}s?(x)", 18 | "**/tests/unit/**/*.spec.{j,t}s?(x)" 19 | ], 20 | env: { 21 | jest: true 22 | } 23 | } 24 | ] 25 | }; 26 | -------------------------------------------------------------------------------- /21-frameworks/vue/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /21-frameworks/vue/README.md: -------------------------------------------------------------------------------- 1 | # vue 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your unit tests 19 | ``` 20 | npm run test:unit 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /21-frameworks/vue/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /21-frameworks/vue/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | transform: { 4 | "^.+\\.vue$": "vue-jest", 5 | }, 6 | testMatch: ["**/*.spec.js"], 7 | }; 8 | -------------------------------------------------------------------------------- /21-frameworks/vue/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/vue/public/favicon.ico -------------------------------------------------------------------------------- /21-frameworks/vue/src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 26 | -------------------------------------------------------------------------------- /21-frameworks/vue/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/vue/src/assets/logo.png -------------------------------------------------------------------------------- /21-frameworks/vue/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | 4 | createApp(App).mount("#app"); 5 | -------------------------------------------------------------------------------- /22-unit-test/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /22-unit-test/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | extends: ["plugin:vue/vue3-essential", "eslint:recommended", "@vue/prettier"], 7 | parserOptions: { 8 | parser: "babel-eslint" 9 | }, 10 | rules: { 11 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", 12 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off" 13 | }, 14 | overrides: [ 15 | { 16 | files: [ 17 | "**/__tests__/*.{j,t}s?(x)", 18 | "**/tests/unit/**/*.spec.{j,t}s?(x)" 19 | ], 20 | env: { 21 | jest: true 22 | } 23 | } 24 | ] 25 | }; 26 | -------------------------------------------------------------------------------- /22-unit-test/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /22-unit-test/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all" 3 | } 4 | -------------------------------------------------------------------------------- /22-unit-test/README.md: -------------------------------------------------------------------------------- 1 | # vue 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your unit tests 19 | ``` 20 | npm run test:unit 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /22-unit-test/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /22-unit-test/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | transform: { 4 | "^.+\\.vue$": "vue-jest", 5 | }, 6 | testMatch: ["**/*.spec.js"], 7 | }; 8 | -------------------------------------------------------------------------------- /22-unit-test/public/cursos/bash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/bash.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/comunicacion-microservicios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/comunicacion-microservicios.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/css-layouts-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/css-layouts-bg.png -------------------------------------------------------------------------------- /22-unit-test/public/cursos/css-layouts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/css-layouts.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-agile-retrospectivas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-agile-retrospectivas.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-api-http-scala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-api-http-scala.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-app-mean-webpack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-app-mean-webpack.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-app-vuejs-jest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-app-vuejs-jest.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-arquitectura-hexagonal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-arquitectura-hexagonal.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-aws-ec2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-aws-ec2.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-aws-escalando-apps.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-aws-escalando-apps.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-cqrs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-cqrs.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-introduccion-scala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-introduccion-scala.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-screenshot-testing-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-screenshot-testing-android.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-screenshot-testing-ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-screenshot-testing-ios.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-ui-testing-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-ui-testing-android.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/curso-ui-testing-ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-ui-testing-ios.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/ddd-en-php.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/ddd-en-php.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/ddd-java.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/ddd-java.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/docker-desde-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/docker-desde-0.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/domain-driven-design.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/domain-driven-design.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/dotfiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/dotfiles.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/elastic-stack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/elastic-stack.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/git-introduccion-trabajo-en-equipo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/git-introduccion-trabajo-en-equipo.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/github-actions-automatizacion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/github-actions-automatizacion.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/github-actions-integracion-continua.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/github-actions-integracion-continua.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/go-primera-app.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/go-primera-app.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/intellij.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/intellij.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/iterm-productividad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/iterm-productividad.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/kubernetes-para-desarrolladores.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/kubernetes-para-desarrolladores.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/makefiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/makefiles.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/migracion-vuejs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/migracion-vuejs.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/notion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/notion.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/programacion-funcional-refactor-typeclasses.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/programacion-funcional-refactor-typeclasses.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/prometheus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/prometheus.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/reactjs-de-0-a-deploy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/reactjs-de-0-a-deploy.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/solid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/solid.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/terminal-zsh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/terminal-zsh.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/testing-introduccion-buenas-practicas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/testing-introduccion-buenas-practicas.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/testing-vuex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/testing-vuex.jpg -------------------------------------------------------------------------------- /22-unit-test/public/cursos/vistas-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/vistas-android.jpg -------------------------------------------------------------------------------- /22-unit-test/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/favicon.ico -------------------------------------------------------------------------------- /22-unit-test/src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 26 | -------------------------------------------------------------------------------- /22-unit-test/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | 4 | createApp(App).mount("#app"); 5 | -------------------------------------------------------------------------------- /22-unit-test/src/services/CoursesRepository.js: -------------------------------------------------------------------------------- 1 | import courses from "./courses.json"; 2 | 3 | export default class CoursesRepository { 4 | searchAll() { 5 | return new Promise(resolve => { 6 | resolve(courses); 7 | }); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /22-unit-test/src/views/HomeView.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | -------------------------------------------------------------------------------- /31-testing-important-stuff/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /31-testing-important-stuff/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /31-testing-important-stuff/README.md: -------------------------------------------------------------------------------- 1 | # Resilient tests with Testing Library 2 | 3 | ## Project setup 4 | 5 | ``` 6 | npm install 7 | ``` 8 | 9 | ### Compiles and hot-reloads for development 10 | 11 | ``` 12 | npm run serve 13 | ``` 14 | 15 | ### Compiles and minifies for production 16 | 17 | ``` 18 | npm run build 19 | ``` 20 | 21 | ### Run your unit tests 22 | 23 | ``` 24 | npm run test:unit 25 | ``` 26 | 27 | ### Lints and fixes files 28 | 29 | ``` 30 | npm run lint 31 | ``` 32 | 33 | ### Customize configuration 34 | 35 | See [Configuration Reference](https://cli.vuejs.org/config/). 36 | -------------------------------------------------------------------------------- /31-testing-important-stuff/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /31-testing-important-stuff/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | transform: { 4 | "^.+\\.vue$": "vue-jest", 5 | }, 6 | testMatch: ["**/*.spec.js"], 7 | }; 8 | -------------------------------------------------------------------------------- /31-testing-important-stuff/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/31-testing-important-stuff/public/favicon.ico -------------------------------------------------------------------------------- /31-testing-important-stuff/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /31-testing-important-stuff/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/31-testing-important-stuff/src/assets/logo.png -------------------------------------------------------------------------------- /31-testing-important-stuff/src/components/ErrorMessage.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /31-testing-important-stuff/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | 4 | createApp(App).mount("#app"); 5 | -------------------------------------------------------------------------------- /31-testing-important-stuff/src/pageobjects/ErrorPageObject.js: -------------------------------------------------------------------------------- 1 | import { nextTick } from "vue"; 2 | 3 | export default class ErrorPageObject { 4 | constructor(wrapper) { 5 | this.wrapper = wrapper; 6 | } 7 | 8 | text() { 9 | return this.wrapper.text(); 10 | } 11 | 12 | async wait() { 13 | await nextTick(); 14 | } 15 | 16 | hasErrorMessage() { 17 | return this.wrapper.find('[data-test-id="message"]').exists(); 18 | } 19 | 20 | clickToggleButton() { 21 | this.wrapper.find(['data-test-id="toggle-message"]').trigger("click"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /31-testing-important-stuff/src/test/01-ErrorToggle.spec.js: -------------------------------------------------------------------------------- 1 | import { shallowMount } from "@vue/test-utils"; 2 | import ErrorToggle from "@/components/ErrorToggle.vue"; 3 | 4 | describe("Error Toggle", () => { 5 | it("should toggle open property when button is clicked", async () => { 6 | const wrapper = shallowMount(ErrorToggle); 7 | const button = wrapper.find("#toggle-message"); 8 | 9 | button.trigger("click"); 10 | expect(wrapper.vm.open).toBe(true); 11 | 12 | button.trigger("click"); 13 | expect(wrapper.vm.open).toBe(false); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /32-testing-as-a-user/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /32-testing-as-a-user/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /32-testing-as-a-user/README.md: -------------------------------------------------------------------------------- 1 | # Resilient tests with Testing Library 2 | 3 | ## Project setup 4 | 5 | ``` 6 | npm install 7 | ``` 8 | 9 | ### Compiles and hot-reloads for development 10 | 11 | ``` 12 | npm run serve 13 | ``` 14 | 15 | ### Compiles and minifies for production 16 | 17 | ``` 18 | npm run build 19 | ``` 20 | 21 | ### Run your unit tests 22 | 23 | ``` 24 | npm run test:unit 25 | ``` 26 | 27 | ### Lints and fixes files 28 | 29 | ``` 30 | npm run lint 31 | ``` 32 | 33 | ### Customize configuration 34 | 35 | See [Configuration Reference](https://cli.vuejs.org/config/). 36 | -------------------------------------------------------------------------------- /32-testing-as-a-user/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /32-testing-as-a-user/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | transform: { 4 | "^.+\\.vue$": "vue-jest", 5 | }, 6 | testMatch: ["**/*.spec.js"], 7 | }; 8 | -------------------------------------------------------------------------------- /32-testing-as-a-user/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/32-testing-as-a-user/public/favicon.ico -------------------------------------------------------------------------------- /32-testing-as-a-user/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /32-testing-as-a-user/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/32-testing-as-a-user/src/assets/logo.png -------------------------------------------------------------------------------- /32-testing-as-a-user/src/components/ErrorMessage.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /32-testing-as-a-user/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | 4 | createApp(App).mount("#app"); 5 | -------------------------------------------------------------------------------- /32-testing-as-a-user/src/pageobjects/ErrorPageObject.js: -------------------------------------------------------------------------------- 1 | import { render, fireEvent, screen } from "@testing-library/vue"; 2 | 3 | export default class ErrorPageObject { 4 | constructor(component) { 5 | render(component); 6 | } 7 | 8 | hasErrorMessage() { 9 | return !!screen.queryByRole("alert"); 10 | } 11 | 12 | errorMessageText() { 13 | return screen.getByRole("alert").innerHTML; 14 | } 15 | 16 | async clickToggleButton() { 17 | const button = screen.getByRole("button", { name: /toggle/i }); 18 | await fireEvent.click(button); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /32-testing-as-a-user/src/test/02-ErrorToggleTestingLibraryPageObject.spec.js: -------------------------------------------------------------------------------- 1 | import ErrorToggle from "@/components/ErrorToggle.vue"; 2 | import ErrorPageObject from "@/pageobjects/ErrorPageObject"; 3 | 4 | describe("Error Toggle", () => { 5 | it("should toggle contact message when button is clicked", async () => { 6 | const page = new ErrorPageObject(ErrorToggle); 7 | 8 | await page.clickToggleButton(); 9 | 10 | expect(page.hasErrorMessage()).toBe(true); 11 | expect(page.errorMessageText()).toMatch(/contact us/i); 12 | 13 | await page.clickToggleButton(); 14 | 15 | expect(page.hasErrorMessage()).toBe(false); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /34-semantic-tests/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /34-semantic-tests/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /34-semantic-tests/README.md: -------------------------------------------------------------------------------- 1 | # Semantic tests with Testing Library 2 | 3 | ## Project setup 4 | 5 | ``` 6 | npm install 7 | ``` 8 | 9 | ### Compiles and hot-reloads for development 10 | 11 | ``` 12 | npm run serve 13 | ``` 14 | 15 | ### Compiles and minifies for production 16 | 17 | ``` 18 | npm run build 19 | ``` 20 | 21 | ### Run your unit tests 22 | 23 | ``` 24 | npm run test:unit 25 | ``` 26 | 27 | ### Lints and fixes files 28 | 29 | ``` 30 | npm run lint 31 | ``` 32 | 33 | ### Customize configuration 34 | 35 | See [Configuration Reference](https://cli.vuejs.org/config/). 36 | -------------------------------------------------------------------------------- /34-semantic-tests/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /34-semantic-tests/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | transform: { 4 | "^.+\\.vue$": "vue-jest", 5 | }, 6 | testMatch: ["**/*.spec.js"], 7 | }; 8 | -------------------------------------------------------------------------------- /34-semantic-tests/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/34-semantic-tests/public/favicon.ico -------------------------------------------------------------------------------- /34-semantic-tests/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /34-semantic-tests/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/34-semantic-tests/src/assets/logo.png -------------------------------------------------------------------------------- /34-semantic-tests/src/components/ErrorMessage.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /34-semantic-tests/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | 4 | createApp(App).mount("#app"); 5 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is currently used by autoprefixer to adjust CSS to support the below specified browsers 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | # For IE 9-11 support, please uncomment the last line of the file and adjust as needed 5 | > 0.5% 6 | last 2 versions 7 | Firefox ESR 8 | not dead 9 | # IE 9-11 -------------------------------------------------------------------------------- /41-a11y-axe/angular/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/.npmrc: -------------------------------------------------------------------------------- 1 | registry=http://registry.npmjs.org/ 2 | package-lock=false 3 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/README.md: -------------------------------------------------------------------------------- 1 | # Angular 2 | 3 | Configuration based on [Angular Testing Library examples]() 4 | 5 | ## Run dev mode 6 | 7 | ``` 8 | npm run start 9 | ``` 10 | 11 | ## Run tests 12 | 13 | ``` 14 | npm run test 15 | ``` 16 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/app/app.component.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | flex-direction: column; 4 | position: absolute; 5 | top: 0; 6 | bottom: 0; 7 | left: 0; 8 | right: 0; 9 | } 10 | 11 | .sidenav { 12 | flex: 1; 13 | } 14 | 15 | .sidenav-container { 16 | padding: 10px; 17 | } 18 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['app.component.css'], 7 | }) 8 | export class AppComponent { 9 | } 10 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/app/components/success-message.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'success-message', 5 | template: ` 6 |

Thank you {{ user.name }}!

`, 7 | }) 8 | export class SuccessMessageComponent { 9 | @Input() user; 10 | } 11 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/app/material.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | 3 | import { MatInputModule } from '@angular/material/input'; 4 | import { MatSelectModule } from '@angular/material/select'; 5 | 6 | @NgModule({ 7 | exports: [MatInputModule, MatSelectModule], 8 | }) 9 | export class MaterialModule {} 10 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/41-a11y-axe/angular/example-app/assets/.gitkeep -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | }; 4 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/41-a11y-axe/angular/example-app/favicon.ico -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AngularTestingLibraryApp 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'Example App', 3 | displayName: { 4 | name: 'Example', 5 | color: 'blue', 6 | }, 7 | preset: '../jest.preset.js', 8 | }; 9 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic() 12 | .bootstrapModule(AppModule) 13 | .catch((err) => console.log(err)); 14 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/styles.css: -------------------------------------------------------------------------------- 1 | @import '@angular/material/prebuilt-themes/deeppurple-amber.css'; 2 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/test-setup.ts: -------------------------------------------------------------------------------- 1 | import 'jest-preset-angular'; 2 | import '@testing-library/jest-dom'; 3 | import { configure } from '@testing-library/angular'; 4 | import { ReactiveFormsModule } from '@angular/forms'; 5 | 6 | configure({ 7 | defaultImports: [ReactiveFormsModule], 8 | }); 9 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "types": [], 6 | "allowJs": true 7 | }, 8 | "files": ["main.ts", "polyfills.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "types": ["node", "jest"] 6 | }, 7 | "files": ["test-setup.ts"], 8 | "include": ["**/*.spec.ts", "**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/example-app/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tslint.json", 3 | "rules": { 4 | "directive-selector": [true, "attribute", "app", "camelCase"], 5 | "component-selector": [true, "element", "app", "kebab-case"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | projects: ['/'], 3 | }; 4 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 120, 3 | tabWidth: 2, 4 | useTabs: false, 5 | semi: true, 6 | singleQuote: true, 7 | trailingComma: 'all', 8 | bracketSpacing: true, 9 | }; 10 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/release.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | pkgRoot: 'dist/@testing-library/angular', 3 | branches: ['master', { name: 'beta', prerelease: true }], 4 | }; 5 | -------------------------------------------------------------------------------- /41-a11y-axe/angular/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "importHelpers": true, 6 | "module": "esnext", 7 | "outDir": "./dist/out-tsc", 8 | "sourceMap": true, 9 | "declaration": false, 10 | "moduleResolution": "node", 11 | "emitDecoratorMetadata": true, 12 | "experimentalDecorators": true, 13 | "target": "es2015", 14 | "typeRoots": ["node_modules/@types"], 15 | "lib": ["es2017", "dom"] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /41-a11y-axe/react/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /41-a11y-axe/react/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/41-a11y-axe/react/public/favicon.ico -------------------------------------------------------------------------------- /41-a11y-axe/react/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/41-a11y-axe/react/public/logo192.png -------------------------------------------------------------------------------- /41-a11y-axe/react/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/41-a11y-axe/react/public/logo512.png -------------------------------------------------------------------------------- /41-a11y-axe/react/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /41-a11y-axe/react/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /41-a11y-axe/react/src/App.js: -------------------------------------------------------------------------------- 1 | import "./App.css"; 2 | import CreateProfile from "./components/CreateProfile"; 3 | 4 | function App() { 5 | return ( 6 |
7 | 8 |
9 | ); 10 | } 11 | 12 | export default App; 13 | -------------------------------------------------------------------------------- /41-a11y-axe/react/src/components/SuccessMessage.js: -------------------------------------------------------------------------------- 1 | function SuccessMessage(props) { 2 | return

Thank you {props.user.name}!

; 3 | } 4 | 5 | export default SuccessMessage; 6 | -------------------------------------------------------------------------------- /41-a11y-axe/react/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /41-a11y-axe/react/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /41-a11y-axe/react/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /41-a11y-axe/react/src/services/userRepository.js: -------------------------------------------------------------------------------- 1 | export function createUser(details) { 2 | return new Promise((resolve) => { 3 | resolve(details); 4 | }); 5 | } 6 | -------------------------------------------------------------------------------- /41-a11y-axe/react/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /41-a11y-axe/react/src/test/00-CreateProfileA11y.test.js: -------------------------------------------------------------------------------- 1 | import { axe, toHaveNoViolations } from "jest-axe"; 2 | import { render } from "@testing-library/react"; 3 | import CreateProfile from "../components/CreateProfile"; 4 | 5 | expect.extend(toHaveNoViolations); 6 | 7 | describe("CreateProfile component", () => { 8 | it("should be accessible", async () => { 9 | const { container } = render(); 10 | 11 | expect(await axe(container)).toHaveNoViolations(); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is currently used by autoprefixer to adjust CSS to support the below specified browsers 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | # For IE 9-11 support, please uncomment the last line of the file and adjust as needed 5 | > 0.5% 6 | last 2 versions 7 | Firefox ESR 8 | not dead 9 | # IE 9-11 -------------------------------------------------------------------------------- /42-a11y-selectors/angular/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/.npmrc: -------------------------------------------------------------------------------- 1 | registry=http://registry.npmjs.org/ 2 | package-lock=false 3 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/README.md: -------------------------------------------------------------------------------- 1 | # Angular 2 | 3 | Configuration based on [Angular Testing Library examples](https://github.com/testing-library/angular-testing-library/) 4 | 5 | ## Run dev mode 6 | 7 | ``` 8 | npm run start 9 | ``` 10 | 11 | ## Run tests 12 | 13 | ``` 14 | npm run test 15 | ``` 16 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/app/app.component.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | flex-direction: column; 4 | position: absolute; 5 | top: 0; 6 | bottom: 0; 7 | left: 0; 8 | right: 0; 9 | } 10 | 11 | .sidenav { 12 | flex: 1; 13 | } 14 | 15 | .sidenav-container { 16 | padding: 10px; 17 | } 18 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['app.component.css'], 7 | }) 8 | export class AppComponent { 9 | } 10 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/app/components/success-message.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'success-message', 5 | template: ` 6 |

Thank you {{ user.name }}!

`, 7 | }) 8 | export class SuccessMessageComponent { 9 | @Input() user; 10 | } 11 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/app/material.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | 3 | import { MatInputModule } from '@angular/material/input'; 4 | import { MatSelectModule } from '@angular/material/select'; 5 | 6 | @NgModule({ 7 | exports: [MatInputModule, MatSelectModule], 8 | }) 9 | export class MaterialModule {} 10 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/42-a11y-selectors/angular/example-app/assets/.gitkeep -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | }; 4 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/42-a11y-selectors/angular/example-app/favicon.ico -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AngularTestingLibraryApp 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'Example App', 3 | displayName: { 4 | name: 'Example', 5 | color: 'blue', 6 | }, 7 | preset: '../jest.preset.js', 8 | }; 9 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic() 12 | .bootstrapModule(AppModule) 13 | .catch((err) => console.log(err)); 14 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/styles.css: -------------------------------------------------------------------------------- 1 | @import '@angular/material/prebuilt-themes/deeppurple-amber.css'; 2 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/test-setup.ts: -------------------------------------------------------------------------------- 1 | import 'jest-preset-angular'; 2 | import '@testing-library/jest-dom'; 3 | import { configure } from '@testing-library/angular'; 4 | import { ReactiveFormsModule } from '@angular/forms'; 5 | 6 | configure({ 7 | defaultImports: [ReactiveFormsModule], 8 | }); 9 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "types": [], 6 | "allowJs": true 7 | }, 8 | "files": ["main.ts", "polyfills.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "types": ["node", "jest"] 6 | }, 7 | "files": ["test-setup.ts"], 8 | "include": ["**/*.spec.ts", "**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/example-app/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tslint.json", 3 | "rules": { 4 | "directive-selector": [true, "attribute", "app", "camelCase"], 5 | "component-selector": [true, "element", "app", "kebab-case"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | projects: ['/'], 3 | }; 4 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 120, 3 | tabWidth: 2, 4 | useTabs: false, 5 | semi: true, 6 | singleQuote: true, 7 | trailingComma: 'all', 8 | bracketSpacing: true, 9 | }; 10 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/release.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | pkgRoot: 'dist/@testing-library/angular', 3 | branches: ['master', { name: 'beta', prerelease: true }], 4 | }; 5 | -------------------------------------------------------------------------------- /42-a11y-selectors/angular/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "importHelpers": true, 6 | "module": "esnext", 7 | "outDir": "./dist/out-tsc", 8 | "sourceMap": true, 9 | "declaration": false, 10 | "moduleResolution": "node", 11 | "emitDecoratorMetadata": true, 12 | "experimentalDecorators": true, 13 | "target": "es2015", 14 | "typeRoots": ["node_modules/@types"], 15 | "lib": ["es2017", "dom"] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /42-a11y-selectors/react/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /42-a11y-selectors/react/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/42-a11y-selectors/react/public/favicon.ico -------------------------------------------------------------------------------- /42-a11y-selectors/react/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/42-a11y-selectors/react/public/logo192.png -------------------------------------------------------------------------------- /42-a11y-selectors/react/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/42-a11y-selectors/react/public/logo512.png -------------------------------------------------------------------------------- /42-a11y-selectors/react/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /42-a11y-selectors/react/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /42-a11y-selectors/react/src/App.js: -------------------------------------------------------------------------------- 1 | import "./App.css"; 2 | import CreateProfile from "./components/CreateProfile"; 3 | 4 | function App() { 5 | return ( 6 |
7 | 8 |
9 | ); 10 | } 11 | 12 | export default App; 13 | -------------------------------------------------------------------------------- /42-a11y-selectors/react/src/components/SuccessMessage.js: -------------------------------------------------------------------------------- 1 | function SuccessMessage(props) { 2 | return

Thank you {props.user.name}!

; 3 | } 4 | 5 | export default SuccessMessage; 6 | -------------------------------------------------------------------------------- /42-a11y-selectors/react/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /42-a11y-selectors/react/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /42-a11y-selectors/react/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /42-a11y-selectors/react/src/services/userRepository.js: -------------------------------------------------------------------------------- 1 | export function createUser(details) { 2 | return new Promise((resolve) => { 3 | resolve(details); 4 | }); 5 | } 6 | -------------------------------------------------------------------------------- /42-a11y-selectors/react/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /51-test-structure/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /51-test-structure/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/51-test-structure/public/favicon.ico -------------------------------------------------------------------------------- /51-test-structure/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/51-test-structure/public/logo192.png -------------------------------------------------------------------------------- /51-test-structure/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/51-test-structure/public/logo512.png -------------------------------------------------------------------------------- /51-test-structure/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /51-test-structure/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /51-test-structure/src/App.js: -------------------------------------------------------------------------------- 1 | import "./App.css"; 2 | import CreateProfile from "./components/CreateProfile"; 3 | 4 | function App() { 5 | return ( 6 |
7 | 8 |
9 | ); 10 | } 11 | 12 | export default App; 13 | -------------------------------------------------------------------------------- /51-test-structure/src/components/SuccessMessage.js: -------------------------------------------------------------------------------- 1 | function SuccessMessage(props) { 2 | return

Thank you {props.user.name}!

; 3 | } 4 | 5 | export default SuccessMessage; 6 | -------------------------------------------------------------------------------- /51-test-structure/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /51-test-structure/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /51-test-structure/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /51-test-structure/src/services/userRepository.js: -------------------------------------------------------------------------------- 1 | export function createUser(details) { 2 | return new Promise((resolve) => { 3 | resolve(details); 4 | }); 5 | } 6 | -------------------------------------------------------------------------------- /51-test-structure/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /52-test-description/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /52-test-description/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/52-test-description/public/favicon.ico -------------------------------------------------------------------------------- /52-test-description/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/52-test-description/public/logo192.png -------------------------------------------------------------------------------- /52-test-description/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/52-test-description/public/logo512.png -------------------------------------------------------------------------------- /52-test-description/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /52-test-description/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /52-test-description/src/App.js: -------------------------------------------------------------------------------- 1 | import "./App.css"; 2 | import CreateProfile from "./components/CreateProfile"; 3 | 4 | function App() { 5 | return ( 6 |
7 | 8 |
9 | ); 10 | } 11 | 12 | export default App; 13 | -------------------------------------------------------------------------------- /52-test-description/src/components/SuccessMessage.js: -------------------------------------------------------------------------------- 1 | function SuccessMessage(props) { 2 | return

Thank you {props.user.name}!

; 3 | } 4 | 5 | export default SuccessMessage; 6 | -------------------------------------------------------------------------------- /52-test-description/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /52-test-description/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /52-test-description/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /52-test-description/src/services/userRepository.js: -------------------------------------------------------------------------------- 1 | export function createUser(details) { 2 | return new Promise((resolve) => { 3 | resolve(details); 4 | }); 5 | } 6 | -------------------------------------------------------------------------------- /52-test-description/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /61-mocking/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /61-mocking/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | extends: ["plugin:vue/vue3-essential", "eslint:recommended", "@vue/prettier"], 7 | parserOptions: { 8 | parser: "babel-eslint" 9 | }, 10 | rules: { 11 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", 12 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off" 13 | }, 14 | overrides: [ 15 | { 16 | files: [ 17 | "**/__tests__/*.{j,t}s?(x)", 18 | "**/tests/unit/**/*.spec.{j,t}s?(x)" 19 | ], 20 | env: { 21 | jest: true 22 | } 23 | } 24 | ] 25 | }; 26 | -------------------------------------------------------------------------------- /61-mocking/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /61-mocking/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all" 3 | } 4 | -------------------------------------------------------------------------------- /61-mocking/README.md: -------------------------------------------------------------------------------- 1 | # vue 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your unit tests 19 | ``` 20 | npm run test:unit 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /61-mocking/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /61-mocking/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | transform: { 4 | "^.+\\.vue$": "vue-jest", 5 | }, 6 | testMatch: ["**/*.spec.js"], 7 | restoreMocks: true, 8 | }; 9 | -------------------------------------------------------------------------------- /61-mocking/public/cursos/bash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/bash.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/comunicacion-microservicios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/comunicacion-microservicios.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/css-layouts-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/css-layouts-bg.png -------------------------------------------------------------------------------- /61-mocking/public/cursos/css-layouts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/css-layouts.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-agile-retrospectivas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-agile-retrospectivas.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-api-http-scala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-api-http-scala.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-app-mean-webpack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-app-mean-webpack.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-app-vuejs-jest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-app-vuejs-jest.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-arquitectura-hexagonal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-arquitectura-hexagonal.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-aws-ec2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-aws-ec2.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-aws-escalando-apps.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-aws-escalando-apps.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-cqrs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-cqrs.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-introduccion-scala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-introduccion-scala.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-screenshot-testing-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-screenshot-testing-android.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-screenshot-testing-ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-screenshot-testing-ios.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-ui-testing-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-ui-testing-android.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/curso-ui-testing-ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-ui-testing-ios.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/ddd-en-php.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/ddd-en-php.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/ddd-java.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/ddd-java.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/docker-desde-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/docker-desde-0.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/domain-driven-design.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/domain-driven-design.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/dotfiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/dotfiles.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/elastic-stack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/elastic-stack.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/git-introduccion-trabajo-en-equipo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/git-introduccion-trabajo-en-equipo.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/github-actions-automatizacion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/github-actions-automatizacion.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/github-actions-integracion-continua.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/github-actions-integracion-continua.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/go-primera-app.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/go-primera-app.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/intellij.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/intellij.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/iterm-productividad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/iterm-productividad.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/kubernetes-para-desarrolladores.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/kubernetes-para-desarrolladores.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/makefiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/makefiles.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/migracion-vuejs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/migracion-vuejs.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/notion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/notion.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/programacion-funcional-refactor-typeclasses.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/programacion-funcional-refactor-typeclasses.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/prometheus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/prometheus.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/reactjs-de-0-a-deploy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/reactjs-de-0-a-deploy.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/solid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/solid.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/terminal-zsh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/terminal-zsh.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/testing-introduccion-buenas-practicas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/testing-introduccion-buenas-practicas.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/testing-vuex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/testing-vuex.jpg -------------------------------------------------------------------------------- /61-mocking/public/cursos/vistas-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/vistas-android.jpg -------------------------------------------------------------------------------- /61-mocking/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/favicon.ico -------------------------------------------------------------------------------- /61-mocking/src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 26 | -------------------------------------------------------------------------------- /61-mocking/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | 4 | createApp(App).mount("#app"); 5 | -------------------------------------------------------------------------------- /61-mocking/src/services/CoursesRepository.js: -------------------------------------------------------------------------------- 1 | import courses from "./courses.json"; 2 | 3 | export default class CoursesRepository { 4 | searchAll() { 5 | return new Promise(resolve => { 6 | resolve(courses); 7 | }); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /61-mocking/src/services/timeService.js: -------------------------------------------------------------------------------- 1 | import dayjs from "dayjs"; 2 | import relativeTime from "dayjs/plugin/relativeTime"; 3 | 4 | dayjs.extend(relativeTime); 5 | 6 | export function getTimeAgo(time) { 7 | return dayjs(time).fromNow(); 8 | } 9 | -------------------------------------------------------------------------------- /61-mocking/src/views/HomeView.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | -------------------------------------------------------------------------------- /62-mocking-fetch/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /62-mocking-fetch/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testMatch: ["**/*.test.js"], 3 | restoreMocks: true, 4 | }; 5 | -------------------------------------------------------------------------------- /62-mocking-fetch/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/62-mocking-fetch/public/favicon.ico -------------------------------------------------------------------------------- /62-mocking-fetch/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/62-mocking-fetch/public/logo192.png -------------------------------------------------------------------------------- /62-mocking-fetch/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/62-mocking-fetch/public/logo512.png -------------------------------------------------------------------------------- /62-mocking-fetch/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /62-mocking-fetch/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /62-mocking-fetch/src/Home.js: -------------------------------------------------------------------------------- 1 | import Posts from "./components/PostsWithService"; 2 | 3 | function Home() { 4 | return ( 5 |
6 | 7 |
8 | ); 9 | } 10 | 11 | export default Home; 12 | -------------------------------------------------------------------------------- /62-mocking-fetch/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 4 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | text-align: center; 9 | } 10 | 11 | code { 12 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 13 | monospace; 14 | } 15 | -------------------------------------------------------------------------------- /62-mocking-fetch/src/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import "./index.css"; 4 | import Home from "./Home"; 5 | import reportWebVitals from "./reportWebVitals"; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById("root") 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /62-mocking-fetch/src/mocks/handlers.js: -------------------------------------------------------------------------------- 1 | import { rest } from "msw"; 2 | 3 | export function getPosts(response = [], status = 200) { 4 | return rest.get( 5 | "https://jsonplaceholder.typicode.com/posts", 6 | (req, res, ctx) => { 7 | return res(ctx.status(status), ctx.json(response)); 8 | } 9 | ); 10 | } 11 | 12 | export function createPost(response = {}, status = 200) { 13 | return rest.post( 14 | "https://jsonplaceholder.typicode.com/posts", 15 | (req, res, ctx) => { 16 | return res(ctx.status(status), ctx.json(response)); 17 | } 18 | ); 19 | } 20 | 21 | export const handlers = [createPost(), getPosts()]; 22 | -------------------------------------------------------------------------------- /62-mocking-fetch/src/mocks/server.js: -------------------------------------------------------------------------------- 1 | import { setupServer } from "msw/node"; 2 | 3 | import { handlers } from "./handlers"; 4 | 5 | export const server = setupServer(...handlers); 6 | -------------------------------------------------------------------------------- /62-mocking-fetch/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /62-mocking-fetch/src/services/postsRepository.js: -------------------------------------------------------------------------------- 1 | export function createPost(data) { 2 | return fetch("https://jsonplaceholder.typicode.com/posts", { 3 | method: "POST", 4 | body: JSON.stringify(data), 5 | headers: { 6 | "Content-type": "application/json; charset=UTF-8", 7 | }, 8 | }).then((response) => response.json()); 9 | } 10 | 11 | export function getAllPosts() { 12 | return fetch("https://jsonplaceholder.typicode.com/posts", { 13 | method: "GET", 14 | headers: { 15 | "Content-type": "application/json; charset=UTF-8", 16 | }, 17 | }).then((response) => response.json()); 18 | } 19 | -------------------------------------------------------------------------------- /62-mocking-fetch/src/setupTests.js: -------------------------------------------------------------------------------- 1 | import "@testing-library/jest-dom"; 2 | import { server } from "./mocks/server"; 3 | 4 | beforeAll(() => server.listen()); 5 | 6 | afterEach(() => server.resetHandlers()); 7 | 8 | afterAll(() => server.close()); 9 | -------------------------------------------------------------------------------- /63-animations/css-transition/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /63-animations/css-transition/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /63-animations/css-transition/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all" 3 | } 4 | -------------------------------------------------------------------------------- /63-animations/css-transition/README.md: -------------------------------------------------------------------------------- 1 | # vue 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your unit tests 19 | ``` 20 | npm run test:unit 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /63-animations/css-transition/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /63-animations/css-transition/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | transform: { 4 | "^.+\\.vue$": "vue-jest", 5 | }, 6 | testMatch: ["**/*.spec.js"], 7 | }; 8 | -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/bash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/bash.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/comunicacion-microservicios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/comunicacion-microservicios.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/css-layouts-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/css-layouts-bg.png -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/css-layouts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/css-layouts.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-agile-retrospectivas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-agile-retrospectivas.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-api-http-scala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-api-http-scala.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-app-mean-webpack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-app-mean-webpack.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-app-vuejs-jest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-app-vuejs-jest.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-arquitectura-hexagonal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-arquitectura-hexagonal.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-aws-ec2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-aws-ec2.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-aws-escalando-apps.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-aws-escalando-apps.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-cqrs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-cqrs.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-introduccion-scala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-introduccion-scala.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-screenshot-testing-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-screenshot-testing-android.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-screenshot-testing-ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-screenshot-testing-ios.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-ui-testing-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-ui-testing-android.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/curso-ui-testing-ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-ui-testing-ios.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/ddd-en-php.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/ddd-en-php.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/ddd-java.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/ddd-java.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/docker-desde-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/docker-desde-0.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/domain-driven-design.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/domain-driven-design.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/dotfiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/dotfiles.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/elastic-stack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/elastic-stack.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/git-introduccion-trabajo-en-equipo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/git-introduccion-trabajo-en-equipo.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/github-actions-automatizacion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/github-actions-automatizacion.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/github-actions-integracion-continua.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/github-actions-integracion-continua.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/go-primera-app.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/go-primera-app.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/intellij.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/intellij.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/iterm-productividad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/iterm-productividad.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/kubernetes-para-desarrolladores.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/kubernetes-para-desarrolladores.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/makefiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/makefiles.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/migracion-vuejs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/migracion-vuejs.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/notion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/notion.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/programacion-funcional-refactor-typeclasses.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/programacion-funcional-refactor-typeclasses.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/prometheus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/prometheus.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/reactjs-de-0-a-deploy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/reactjs-de-0-a-deploy.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/solid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/solid.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/terminal-zsh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/terminal-zsh.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/testing-introduccion-buenas-practicas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/testing-introduccion-buenas-practicas.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/testing-vuex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/testing-vuex.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/cursos/vistas-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/vistas-android.jpg -------------------------------------------------------------------------------- /63-animations/css-transition/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/favicon.ico -------------------------------------------------------------------------------- /63-animations/css-transition/src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | 15 | 25 | -------------------------------------------------------------------------------- /63-animations/css-transition/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | 4 | createApp(App).mount("#app"); 5 | -------------------------------------------------------------------------------- /63-animations/time-scale/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /63-animations/time-scale/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testMatch: ["**/*.test.js"], 3 | }; 4 | -------------------------------------------------------------------------------- /63-animations/time-scale/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/time-scale/public/favicon.ico -------------------------------------------------------------------------------- /63-animations/time-scale/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/time-scale/public/logo192.png -------------------------------------------------------------------------------- /63-animations/time-scale/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/time-scale/public/logo512.png -------------------------------------------------------------------------------- /63-animations/time-scale/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /63-animations/time-scale/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /63-animations/time-scale/src/App.js: -------------------------------------------------------------------------------- 1 | import "./App.css"; 2 | import Post from "./components/PostTransition"; 3 | 4 | function App() { 5 | return ( 6 |
7 | 8 |
9 | ); 10 | } 11 | 12 | export default App; 13 | -------------------------------------------------------------------------------- /63-animations/time-scale/src/components/styles.css: -------------------------------------------------------------------------------- 1 | .appear-enter { 2 | opacity: 0; 3 | transform: scale(0.9); 4 | } 5 | .appear-enter-active { 6 | opacity: 1; 7 | transform: translateX(0); 8 | transition: opacity 3000ms, transform 3000ms; 9 | } 10 | .appear-exit { 11 | opacity: 1; 12 | } 13 | .appear-exit-active { 14 | opacity: 0; 15 | transform: scale(0.9); 16 | transition: opacity 3000ms, transform 3000ms; 17 | } 18 | -------------------------------------------------------------------------------- /63-animations/time-scale/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /63-animations/time-scale/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /63-animations/time-scale/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /63-animations/time-scale/src/setupTests.js: -------------------------------------------------------------------------------- 1 | import "@testing-library/jest-dom"; 2 | 3 | process.env.TIME_SCALE_FACTOR = 0; 4 | -------------------------------------------------------------------------------- /71-custom-renderers/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /71-custom-renderers/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /71-custom-renderers/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "none" 3 | } 4 | -------------------------------------------------------------------------------- /71-custom-renderers/README.md: -------------------------------------------------------------------------------- 1 | # vue 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your unit tests 19 | ``` 20 | npm run test:unit 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /71-custom-renderers/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /71-custom-renderers/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | transform: { 4 | "^.+\\.vue$": "vue-jest" 5 | }, 6 | testMatch: ["**/*.spec.js"], 7 | restoreMocks: true 8 | }; 9 | -------------------------------------------------------------------------------- /71-custom-renderers/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/71-custom-renderers/public/favicon.ico -------------------------------------------------------------------------------- /71-custom-renderers/src/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 20 | 21 | 31 | -------------------------------------------------------------------------------- /71-custom-renderers/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/71-custom-renderers/src/assets/logo.png -------------------------------------------------------------------------------- /71-custom-renderers/src/components/Header.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /71-custom-renderers/src/i18n/en.js: -------------------------------------------------------------------------------- 1 | export default { 2 | header: { 3 | title: "Hello world" 4 | } 5 | }; 6 | -------------------------------------------------------------------------------- /71-custom-renderers/src/i18n/es.js: -------------------------------------------------------------------------------- 1 | export default { 2 | header: { 3 | title: "Hola mundo" 4 | } 5 | }; 6 | -------------------------------------------------------------------------------- /71-custom-renderers/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import { createStore } from "vuex"; 3 | import { createI18n } from "vue-i18n"; 4 | 5 | import App from "./App.vue"; 6 | import { store } from "./store"; 7 | 8 | import en from "./i18n/en"; 9 | import es from "./i18n/es"; 10 | 11 | createApp(App) 12 | .use(createStore(store)) 13 | .use( 14 | createI18n({ 15 | locale: "en", 16 | fallbackLocale: "en", 17 | messages: { 18 | en, 19 | es 20 | } 21 | }) 22 | ) 23 | .mount("#app"); 24 | -------------------------------------------------------------------------------- /71-custom-renderers/src/services/commentsRepository.js: -------------------------------------------------------------------------------- 1 | export async function getAllComments() { 2 | return await [ 3 | { 4 | user: { 5 | name: "Nicholas Cage", 6 | avatar: "https://www.placecage.com/120/120" 7 | }, 8 | content: "Lorem ipsum dolor sit amet", 9 | date: "2021-01-31" 10 | } 11 | ]; 12 | } 13 | 14 | export async function createComment(data) { 15 | return await { 16 | ...data, 17 | date: new Date().toISOString() 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /71-custom-renderers/src/services/userRepository.js: -------------------------------------------------------------------------------- 1 | export async function login() { 2 | return await { 3 | name: "Bill Murray", 4 | avatar: "https://www.fillmurray.com/120/120", 5 | }; 6 | } 7 | -------------------------------------------------------------------------------- /72-test-object-factory/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /72-test-object-factory/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /72-test-object-factory/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "none" 3 | } 4 | -------------------------------------------------------------------------------- /72-test-object-factory/README.md: -------------------------------------------------------------------------------- 1 | # vue 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your unit tests 19 | ``` 20 | npm run test:unit 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /72-test-object-factory/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /72-test-object-factory/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | transform: { 4 | "^.+\\.vue$": "vue-jest" 5 | }, 6 | testMatch: ["**/*.spec.js"], 7 | restoreMocks: true 8 | }; 9 | -------------------------------------------------------------------------------- /72-test-object-factory/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/72-test-object-factory/public/favicon.ico -------------------------------------------------------------------------------- /72-test-object-factory/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/72-test-object-factory/src/assets/logo.png -------------------------------------------------------------------------------- /72-test-object-factory/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import { createStore } from "vuex"; 3 | 4 | import App from "./App.vue"; 5 | import { store } from "./store"; 6 | 7 | createApp(App) 8 | .use(createStore(store)) 9 | .mount("#app"); 10 | -------------------------------------------------------------------------------- /72-test-object-factory/src/services/commentsRepository.js: -------------------------------------------------------------------------------- 1 | export async function getAllComments() { 2 | return await [ 3 | { 4 | user: { 5 | name: "Nicholas Cage", 6 | avatar: "https://www.placecage.com/120/120" 7 | }, 8 | content: "Lorem ipsum dolor sit amet", 9 | date: "2021-01-31" 10 | } 11 | ]; 12 | } 13 | 14 | export async function createComment(data) { 15 | return await { 16 | ...data, 17 | date: new Date().toISOString() 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /72-test-object-factory/src/services/userRepository.js: -------------------------------------------------------------------------------- 1 | export async function login() { 2 | return await { 3 | name: "Bill Murray", 4 | avatar: "https://www.fillmurray.com/120/120", 5 | }; 6 | } 7 | -------------------------------------------------------------------------------- /72-test-object-factory/src/test/factories/comment.js: -------------------------------------------------------------------------------- 1 | import { Factory } from "fishery"; 2 | import { date, lorem } from "faker"; 3 | import { generateUser } from "./user"; 4 | 5 | const factory = Factory.define(({ sequence }) => ({ 6 | id: sequence, 7 | date: date.recent().toISOString(), 8 | content: lorem.paragraph(), 9 | user: generateUser() 10 | })); 11 | 12 | export function generateComment(params) { 13 | return factory.build(params); 14 | } 15 | 16 | export function generateCommentList(min = 0, max = 10) { 17 | const length = Math.random() * (max - min) + min; 18 | return factory.buildList(length); 19 | } 20 | -------------------------------------------------------------------------------- /72-test-object-factory/src/test/factories/user.js: -------------------------------------------------------------------------------- 1 | import { Factory } from "fishery"; 2 | import { name, internet } from "faker"; 3 | 4 | const factory = Factory.define(({ sequence }) => ({ 5 | id: sequence, 6 | name: `${name.firstName()} ${name.lastName()}`, 7 | avatar: internet.avatar() 8 | })); 9 | 10 | export function generateUser(params) { 11 | return factory.build(params); 12 | } 13 | -------------------------------------------------------------------------------- /72-test-object-factory/src/test/test-utils.js: -------------------------------------------------------------------------------- 1 | import { render as vtlRender } from "@testing-library/vue"; 2 | import { store } from "../store"; 3 | 4 | export * from "@testing-library/vue"; 5 | 6 | export function render(component, { initialState } = {}) { 7 | return vtlRender(component, { 8 | store: { 9 | ...store, 10 | state: { 11 | ...store.state, 12 | ...initialState 13 | } 14 | } 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /73-snapshots/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is currently used by autoprefixer to adjust CSS to support the below specified browsers 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | # For IE 9-11 support, please uncomment the last line of the file and adjust as needed 5 | > 0.5% 6 | last 2 versions 7 | Firefox ESR 8 | not dead 9 | # IE 9-11 -------------------------------------------------------------------------------- /73-snapshots/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /73-snapshots/.npmrc: -------------------------------------------------------------------------------- 1 | registry=http://registry.npmjs.org/ 2 | package-lock=false 3 | -------------------------------------------------------------------------------- /73-snapshots/README.md: -------------------------------------------------------------------------------- 1 | # Angular 2 | 3 | Configuration based on [Angular Testing Library examples](https://github.com/testing-library/angular-testing-library/) 4 | 5 | ## Run dev mode 6 | 7 | ``` 8 | npm run start 9 | ``` 10 | 11 | ## Run tests 12 | 13 | ``` 14 | npm run test 15 | ``` 16 | -------------------------------------------------------------------------------- /73-snapshots/example-app/app/app.component.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | flex-direction: column; 4 | position: absolute; 5 | top: 0; 6 | bottom: 0; 7 | left: 0; 8 | right: 0; 9 | } 10 | 11 | .sidenav { 12 | flex: 1; 13 | } 14 | 15 | .sidenav-container { 16 | padding: 10px; 17 | } 18 | -------------------------------------------------------------------------------- /73-snapshots/example-app/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /73-snapshots/example-app/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['app.component.css'], 7 | }) 8 | export class AppComponent { 9 | } 10 | -------------------------------------------------------------------------------- /73-snapshots/example-app/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { NgModule } from '@angular/core'; 3 | 4 | import { CommentsComponent } from './components/comments.component' 5 | import { CommentComponent } from './components/comment.component' 6 | 7 | import { AppComponent } from './app.component'; 8 | 9 | @NgModule({ 10 | declarations: [ 11 | AppComponent, 12 | CommentsComponent, 13 | CommentComponent, 14 | ], 15 | imports: [ 16 | BrowserModule, 17 | ], 18 | bootstrap: [AppComponent], 19 | }) 20 | export class AppModule {} 21 | -------------------------------------------------------------------------------- /73-snapshots/example-app/app/material.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | 3 | import { MatInputModule } from '@angular/material/input'; 4 | import { MatSelectModule } from '@angular/material/select'; 5 | 6 | @NgModule({ 7 | exports: [MatInputModule, MatSelectModule], 8 | }) 9 | export class MaterialModule {} 10 | -------------------------------------------------------------------------------- /73-snapshots/example-app/app/models/comment.model.ts: -------------------------------------------------------------------------------- 1 | import { User } from './user.model' 2 | 3 | export interface Comment { 4 | id: number, 5 | content: string, 6 | date: string, 7 | user: User 8 | } 9 | 10 | -------------------------------------------------------------------------------- /73-snapshots/example-app/app/models/user.model.ts: -------------------------------------------------------------------------------- 1 | export interface User { 2 | id: number, 3 | name: string, 4 | avatar: string 5 | } 6 | 7 | -------------------------------------------------------------------------------- /73-snapshots/example-app/app/test/factories/comment.ts: -------------------------------------------------------------------------------- 1 | import { Factory } from "fishery"; 2 | import { date, lorem } from "faker"; 3 | import { Comment } from "../../models/comment.model" 4 | import user from "./user"; 5 | 6 | export default Factory.define(({ sequence }) => ({ 7 | id: sequence, 8 | date: date.recent().toISOString(), 9 | content: lorem.paragraph(), 10 | user: user.build() 11 | })); 12 | -------------------------------------------------------------------------------- /73-snapshots/example-app/app/test/factories/user.ts: -------------------------------------------------------------------------------- 1 | import { Factory } from "fishery"; 2 | import { name, internet } from "faker"; 3 | import { User } from "../../models/user.model" 4 | 5 | export default Factory.define(({ sequence }) => ({ 6 | id: sequence, 7 | name: `${name.firstName()} ${name.lastName()}`, 8 | avatar: internet.avatar() 9 | })); 10 | -------------------------------------------------------------------------------- /73-snapshots/example-app/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/73-snapshots/example-app/assets/.gitkeep -------------------------------------------------------------------------------- /73-snapshots/example-app/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | }; 4 | -------------------------------------------------------------------------------- /73-snapshots/example-app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/73-snapshots/example-app/favicon.ico -------------------------------------------------------------------------------- /73-snapshots/example-app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AngularTestingLibraryApp 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /73-snapshots/example-app/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'Example App', 3 | displayName: { 4 | name: 'Example', 5 | color: 'blue', 6 | }, 7 | preset: '../jest.preset.js', 8 | }; 9 | -------------------------------------------------------------------------------- /73-snapshots/example-app/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic() 12 | .bootstrapModule(AppModule) 13 | .catch((err) => console.log(err)); 14 | -------------------------------------------------------------------------------- /73-snapshots/example-app/styles.css: -------------------------------------------------------------------------------- 1 | @import '@angular/material/prebuilt-themes/deeppurple-amber.css'; 2 | -------------------------------------------------------------------------------- /73-snapshots/example-app/test-setup.ts: -------------------------------------------------------------------------------- 1 | import 'jest-preset-angular'; 2 | import '@testing-library/jest-dom'; 3 | import { configure } from '@testing-library/angular'; 4 | import { ReactiveFormsModule } from '@angular/forms'; 5 | 6 | configure({ 7 | defaultImports: [ReactiveFormsModule], 8 | }); 9 | -------------------------------------------------------------------------------- /73-snapshots/example-app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "types": [], 6 | "allowJs": true 7 | }, 8 | "files": ["main.ts", "polyfills.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /73-snapshots/example-app/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "types": ["node", "jest"] 6 | }, 7 | "files": ["test-setup.ts"], 8 | "include": ["**/*.spec.ts", "**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /73-snapshots/example-app/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tslint.json", 3 | "rules": { 4 | "directive-selector": [true, "attribute", "app", "camelCase"], 5 | "component-selector": [true, "element", "app", "kebab-case"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /73-snapshots/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | projects: ['/'], 3 | }; 4 | -------------------------------------------------------------------------------- /73-snapshots/prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 120, 3 | tabWidth: 2, 4 | useTabs: false, 5 | semi: true, 6 | singleQuote: true, 7 | trailingComma: 'all', 8 | bracketSpacing: true, 9 | }; 10 | -------------------------------------------------------------------------------- /73-snapshots/release.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | pkgRoot: 'dist/@testing-library/angular', 3 | branches: ['master', { name: 'beta', prerelease: true }], 4 | }; 5 | -------------------------------------------------------------------------------- /73-snapshots/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "importHelpers": true, 6 | "module": "esnext", 7 | "outDir": "./dist/out-tsc", 8 | "sourceMap": true, 9 | "declaration": false, 10 | "moduleResolution": "node", 11 | "emitDecoratorMetadata": true, 12 | "experimentalDecorators": true, 13 | "target": "es2015", 14 | "typeRoots": ["node_modules/@types"], 15 | "lib": ["es2017", "dom"] 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /82-TDD/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /82-TDD/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true, 5 | }, 6 | extends: [ 7 | "plugin:vue/vue3-recommended", 8 | "eslint:recommended", 9 | "@vue/prettier", 10 | ], 11 | parserOptions: { 12 | parser: "babel-eslint", 13 | }, 14 | rules: { 15 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", 16 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", 17 | }, 18 | overrides: [ 19 | { 20 | files: ["**/__tests__/*.{j,t}s?(x)", "**/test/**/*.spec.{j,t}s?(x)"], 21 | env: { 22 | jest: true, 23 | }, 24 | }, 25 | ], 26 | }; 27 | -------------------------------------------------------------------------------- /82-TDD/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /82-TDD/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all" 3 | } 4 | -------------------------------------------------------------------------------- /82-TDD/README.md: -------------------------------------------------------------------------------- 1 | # vue 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your unit tests 19 | ``` 20 | npm run test:unit 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /82-TDD/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /82-TDD/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | transform: { 4 | "^.+\\.vue$": "vue-jest", 5 | }, 6 | testMatch: ["**/*.spec.js"], 7 | restoreMocks: true, 8 | }; 9 | -------------------------------------------------------------------------------- /82-TDD/public/cursos/bash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/bash.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/comunicacion-microservicios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/comunicacion-microservicios.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/css-layouts-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/css-layouts-bg.png -------------------------------------------------------------------------------- /82-TDD/public/cursos/css-layouts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/css-layouts.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-agile-retrospectivas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-agile-retrospectivas.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-api-http-scala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-api-http-scala.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-app-mean-webpack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-app-mean-webpack.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-app-vuejs-jest.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-app-vuejs-jest.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-arquitectura-hexagonal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-arquitectura-hexagonal.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-aws-ec2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-aws-ec2.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-aws-escalando-apps.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-aws-escalando-apps.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-cqrs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-cqrs.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-introduccion-scala.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-introduccion-scala.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-screenshot-testing-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-screenshot-testing-android.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-screenshot-testing-ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-screenshot-testing-ios.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-ui-testing-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-ui-testing-android.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/curso-ui-testing-ios.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-ui-testing-ios.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/ddd-en-php.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/ddd-en-php.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/ddd-java.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/ddd-java.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/docker-desde-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/docker-desde-0.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/domain-driven-design.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/domain-driven-design.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/dotfiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/dotfiles.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/elastic-stack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/elastic-stack.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/git-introduccion-trabajo-en-equipo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/git-introduccion-trabajo-en-equipo.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/github-actions-automatizacion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/github-actions-automatizacion.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/github-actions-integracion-continua.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/github-actions-integracion-continua.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/go-primera-app.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/go-primera-app.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/intellij.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/intellij.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/iterm-productividad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/iterm-productividad.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/kubernetes-para-desarrolladores.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/kubernetes-para-desarrolladores.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/makefiles.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/makefiles.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/migracion-vuejs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/migracion-vuejs.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/notion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/notion.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/programacion-funcional-refactor-typeclasses.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/programacion-funcional-refactor-typeclasses.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/prometheus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/prometheus.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/reactjs-de-0-a-deploy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/reactjs-de-0-a-deploy.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/solid.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/solid.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/terminal-zsh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/terminal-zsh.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/testing-introduccion-buenas-practicas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/testing-introduccion-buenas-practicas.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/testing-vuex.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/testing-vuex.jpg -------------------------------------------------------------------------------- /82-TDD/public/cursos/vistas-android.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/vistas-android.jpg -------------------------------------------------------------------------------- /82-TDD/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/favicon.ico -------------------------------------------------------------------------------- /82-TDD/src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 25 | -------------------------------------------------------------------------------- /82-TDD/src/main.js: -------------------------------------------------------------------------------- 1 | import { createApp } from "vue"; 2 | import App from "./App.vue"; 3 | 4 | createApp(App).mount("#app"); 5 | -------------------------------------------------------------------------------- /82-TDD/src/services/articlesRepository.js: -------------------------------------------------------------------------------- 1 | export async function getArticle(id) { 2 | return await fetch( 3 | `https://jsonplaceholder.typicode.com/posts/${id}/`, 4 | ).then(response => response.json()); 5 | } 6 | -------------------------------------------------------------------------------- /82-TDD/src/services/commentsRepository.js: -------------------------------------------------------------------------------- 1 | export async function getAllComments(articleId) { 2 | return await fetch( 3 | `https://jsonplaceholder.typicode.com/comments?postId=${articleId}`, 4 | ) 5 | .then(response => response.json()) 6 | .then(comments => 7 | comments.map(comment => ({ 8 | id: comment.id, 9 | title: comment.name, 10 | username: comment.email.split("@")[0], 11 | body: comment.body, 12 | })), 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /82-TDD/src/test/factories/article.js: -------------------------------------------------------------------------------- 1 | import { Factory } from "fishery"; 2 | import { lorem } from "faker"; 3 | 4 | const factory = Factory.define(({ sequence }) => ({ 5 | id: sequence, 6 | title: lorem.sentence(), 7 | body: lorem.paragraph(), 8 | })); 9 | 10 | export function generateArticle(params) { 11 | return factory.build(params); 12 | } 13 | -------------------------------------------------------------------------------- /82-TDD/src/test/factories/comment.js: -------------------------------------------------------------------------------- 1 | import { Factory } from "fishery"; 2 | import { internet, lorem } from "faker"; 3 | 4 | const factory = Factory.define(({ sequence }) => ({ 5 | id: sequence, 6 | username: internet.userName(), 7 | title: lorem.sentence(), 8 | body: lorem.paragraph(), 9 | })); 10 | 11 | export function generateComment(params) { 12 | return factory.build(params); 13 | } 14 | 15 | export function generateCommentList(min = 0, max = 10) { 16 | const length = Math.random() * (max - min) + min; 17 | return factory.buildList(length); 18 | } 19 | -------------------------------------------------------------------------------- /82-TDD/src/views/ArticleView.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 14 | -------------------------------------------------------------------------------- /91-ci/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /91-ci/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testMatch: ["**/*.test.js"], 3 | restoreMocks: true, 4 | }; 5 | -------------------------------------------------------------------------------- /91-ci/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/91-ci/public/favicon.ico -------------------------------------------------------------------------------- /91-ci/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/91-ci/public/logo192.png -------------------------------------------------------------------------------- /91-ci/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/91-ci/public/logo512.png -------------------------------------------------------------------------------- /91-ci/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /91-ci/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /91-ci/src/Home.js: -------------------------------------------------------------------------------- 1 | import Posts from "./components/Posts"; 2 | 3 | function Home() { 4 | return ( 5 |
6 | 7 |
8 | ); 9 | } 10 | 11 | export default Home; 12 | -------------------------------------------------------------------------------- /91-ci/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 4 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | text-align: center; 9 | } 10 | 11 | code { 12 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 13 | monospace; 14 | } 15 | -------------------------------------------------------------------------------- /91-ci/src/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import "./index.css"; 4 | import Home from "./Home"; 5 | import reportWebVitals from "./reportWebVitals"; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById("root") 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /91-ci/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /91-ci/src/services/postsRepository.js: -------------------------------------------------------------------------------- 1 | export function createPost(data) { 2 | return fetch("https://jsonplaceholder.typicode.com/posts", { 3 | method: "POST", 4 | body: JSON.stringify(data), 5 | headers: { 6 | "Content-type": "application/json; charset=UTF-8", 7 | }, 8 | }).then((response) => response.json()); 9 | } 10 | 11 | export function getAllPosts() { 12 | return fetch("https://jsonplaceholder.typicode.com/posts", { 13 | method: "GET", 14 | headers: { 15 | "Content-type": "application/json; charset=UTF-8", 16 | }, 17 | }).then((response) => response.json()); 18 | } 19 | -------------------------------------------------------------------------------- /91-ci/src/setupTests.js: -------------------------------------------------------------------------------- 1 | import "@testing-library/jest-dom"; 2 | -------------------------------------------------------------------------------- /Q&A/vanilla-js/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Dependency directories 9 | node_modules/ 10 | 11 | # Optional npm cache directory 12 | .npm 13 | 14 | # Optional eslint cache 15 | .eslintcache 16 | 17 | # Output of 'npm pack' 18 | *.tgz 19 | 20 | # Yarn Integrity file 21 | .yarn-integrity 22 | 23 | # dotenv environment variables file 24 | .env 25 | .env.test 26 | 27 | # Build output 28 | dist 29 | -------------------------------------------------------------------------------- /Q&A/vanilla-js/.prettierrc: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /Q&A/vanilla-js/babel.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@babel/preset-env", 5 | { 6 | "useBuiltIns": "usage", 7 | "corejs": "3.9.1" 8 | } 9 | ] 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /Q&A/vanilla-js/cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "http://localhost:8080", 3 | "video": false 4 | } 5 | -------------------------------------------------------------------------------- /Q&A/vanilla-js/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 | CodelyTV 11 |

Hello world!

12 |
13 |

Current users

14 |
15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /Q&A/vanilla-js/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testMatch: ["**/tests/*.(spec|test).js"], 3 | transform: { 4 | "\\.[jt]sx?$": "babel-jest", 5 | }, 6 | moduleNameMapper: { 7 | "\\.(css|less)$": "identity-obj-proxy", 8 | }, 9 | }; 10 | -------------------------------------------------------------------------------- /Q&A/vanilla-js/src/assets/images/logo-codelytv-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/Q&A/vanilla-js/src/assets/images/logo-codelytv-light.png -------------------------------------------------------------------------------- /Q&A/vanilla-js/src/index.js: -------------------------------------------------------------------------------- 1 | import "./assets/css/normalize.css"; 2 | 3 | import { getUsers } from "./users"; 4 | 5 | export async function printUsers() { 6 | const users = await getUsers(); 7 | const element = document.getElementById("users"); 8 | element.innerHTML = users.map((user) => `
${user.name}
`).join(""); 9 | } 10 | -------------------------------------------------------------------------------- /Q&A/vanilla-js/src/users.js: -------------------------------------------------------------------------------- 1 | export async function getUsers() { 2 | return await [{ name: "Javi" }, { name: "Núria" }]; 3 | } 4 | -------------------------------------------------------------------------------- /Q&A/vanilla-js/tests/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["jest"], 3 | "env": { 4 | "jest/globals": true 5 | } 6 | } -------------------------------------------------------------------------------- /Q&A/vanilla-js/webpack.dev.js: -------------------------------------------------------------------------------- 1 | const { merge } = require("webpack-merge"); 2 | 3 | const common = require("./webpack.common.js"); 4 | 5 | module.exports = merge(common, { 6 | mode: "development", 7 | devtool: "inline-source-map", 8 | target: "web", 9 | devServer: { 10 | contentBase: "./dist", 11 | }, 12 | }); 13 | -------------------------------------------------------------------------------- /Q&A/vanilla-js/webpack.prod.js: -------------------------------------------------------------------------------- 1 | const { merge } = require("webpack-merge"); 2 | const MiniCssExtractPlugin = require("mini-css-extract-plugin"); 3 | 4 | const common = require("./webpack.common.js"); 5 | 6 | module.exports = merge(common, { 7 | mode: "production", 8 | devtool: "source-map", 9 | plugins: [new MiniCssExtractPlugin()], 10 | module: { 11 | rules: [ 12 | { 13 | test: /\.css$/i, 14 | use: [MiniCssExtractPlugin.loader, "css-loader"], 15 | }, 16 | ], 17 | }, 18 | }); 19 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/README.md: -------------------------------------------------------------------------------- 1 | # vuetify-example 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your unit tests 19 | ``` 20 | npm run test:unit 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"], 3 | }; 4 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest", 3 | }; 4 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/Q&A/vuetify-example/public/favicon.ico -------------------------------------------------------------------------------- /Q&A/vuetify-example/src/App.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 19 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/Q&A/vuetify-example/src/assets/logo.png -------------------------------------------------------------------------------- /Q&A/vuetify-example/src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | Artboard 46 2 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "./App.vue"; 3 | import vuetify from "./plugins/vuetify"; 4 | 5 | Vue.config.productionTip = false; 6 | 7 | new Vue({ 8 | vuetify, 9 | render: (h) => h(App), 10 | }).$mount("#app"); 11 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Vuetify from "vuetify/lib/framework"; 3 | 4 | Vue.use(Vuetify); 5 | 6 | export default new Vuetify({}); 7 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/tests/unit/test-utils.js: -------------------------------------------------------------------------------- 1 | import { render as vtlRender } from "@testing-library/vue"; 2 | import Vue from "vue"; 3 | import Vuetify from "vuetify"; 4 | 5 | export * from "@testing-library/vue"; 6 | 7 | Vue.use(Vuetify); 8 | 9 | export function render(component, options, cb) { 10 | const root = document.createElement("div"); 11 | root.setAttribute("data-app", "true"); 12 | 13 | return vtlRender( 14 | component, 15 | { 16 | container: document.body.appendChild(root), 17 | vuetify: new Vuetify(), 18 | ...options, 19 | }, 20 | cb 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /Q&A/vuetify-example/vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | transpileDependencies: ["vuetify"], 3 | }; 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Frontend testing with Testing Library 2 | --------------------------------------------------------------------------------