
Muchos sitios web populares le permiten suscribirse a un tema o tema en particular. , puede recibir notificaciones por correo electrónico o en el sitio web.
Un hilo puede ser suscrito
Entonces, ¿qué es lo primero que podemos hacer?
- Dado que hay un hilo
- Dado un usuario autenticado
- Cuando ese usuario se suscribe al hilo
- Entonces el usuario debería poder recuperar todos los hilos suscritos
La ejecución de la prueba nos muestra lo que debemos hacer a continuación, que es crear un nuevo método subscribe ().
vagrant @ homestead: ~ / Code / forumio $ phpunit --filter test_a_thread_can_be_subscriptions_to PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores. E 1/1 (100%) Tiempo: 1.27 segundos, Memoria: 8.00MB Hubo 1 error: 1) Pruebas \ Unidad \ ThreadTest :: test_a_thread_can_be_subscriptions_to BadMethodCallException: llamada al método indefinido Illuminate \ Database \ Query \ Builder :: subscribe ()
Podemos crear este nuevo método subscribe () en el modelo Thread.php así.
vagrant @ homestead: ~ / Code / forumio $ php artesanal make: model ThreadSubscription -m Modelo creado con éxito. Migración creada: 2018_02_20_192313_create_thread_subscriptions_table
Los campos que necesitaremos en nuestra nueva tabla de base de datos están definidos por la migración que acabamos de crear de la siguiente manera:
También agregaremos estos dos nuevos métodos a nuestra clase de modelo Thread.php.
Finalmente, también agregaremos una relación básica a la clase ThreadSubscription.
Ahora estamos obteniendo un estado de aprobación en esta primera prueba.
vagrant @ homestead: ~ / Code / forumio $ phpunit --filter test_a_thread_can_be_subscriptions_to PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores. . Tiempo: 831 ms, Memoria: 8.00MB OK (1 prueba, 1 afirmación)
Un hilo puede ser dado de baja
Por supuesto, un usuario también podrá darse de baja de cualquier hilo en particular al que se haya suscrito.
- Dado que hay un hilo
- Dado que un usuario está suscrito a ese hilo
- Cuando se activa la función de cancelación de suscripción
- Entonces el hilo no debe tener suscripciones
Aquí está el código de prueba real para esta función.
Para pasar esta prueba, necesitaremos algunas cosas.
Con esa simple adición, la prueba pasa.
vagrant @ homestead: ~ / Code / forumio $ phpunit --filter test_a_thread_can_be_unsubscriptions_from PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores. . Tiempo: 840 ms, Memoria: 8.00MB OK (1 prueba, 1 afirmación)
Ahora nuestro entorno de prueba ejecutará migraciones automáticamente en cada ejecución de prueba, pero también ejecutemos las migraciones manualmente para que podamos probarnos en el navegador y ver que la función de suscripción funciona mientras avanzamos.
vagrant @ homestead: ~ / Code / forumio $ php artisan migrate Migrando: 2018_02_20_192313_create_thread_subscriptions_table Migrado: 2018_02_20_192313_create_thread_subscriptions_table
Todavía no tenemos el front end para probar la suscripción a un hilo, pero podemos tomar esto para una ejecución de prueba en tinker.
>>> $ thread = App \ Thread :: latest () -> first (); => Aplicación \ Hilo {# 814 id: 59, user_id: 53, channel_id: 1, título: "El clima es hermoso afuera", cuerpo: "La primavera está en el aire y las temperaturas exteriores se están calentando. ¡Disfruta del hermoso día!", created_at: "2018-02-20 18:06:12", updated_at: "2018-02-20 18:06:12", replies_count: 3, creador: Aplicación \ Usuario {# 822 id: 53 nombre: "Nikola Tesla", created_at: "2018-01-23 18:07:43", updated_at: "2018-01-23 18:07:43", }, canal: Aplicación \ Canal {# 812 id: 1 nombre: "repellat", babosa: "repellat", created_at: "2017-12-21 16:32:19", updated_at: "2017-12-21 16:32:19", }, }
Ahora, suscribiremos un usuario a ese hilo.
>>> $ thread-> subscribe (52); => Aplicación \ Hilo {# 814 id: 59, user_id: 53, channel_id: 1, título: "El clima es hermoso afuera", cuerpo: "La primavera está en el aire y las temperaturas exteriores se están calentando. ¡Disfruta del hermoso día!", created_at: "2018-02-20 18:06:12", updated_at: "2018-02-20 18:06:12", replies_count: 3, creador: Aplicación \ Usuario {# 822 id: 53 nombre: "Nikola Tesla", created_at: "2018-01-23 18:07:43", updated_at: "2018-01-23 18:07:43", }, canal: Aplicación \ Canal {# 812 id: 1 nombre: "repellat", babosa: "repellat", created_at: "2017-12-21 16:32:19", updated_at: "2017-12-21 16:32:19", }, }
Podemos registrar la nueva tabla de base de datos que habíamos creado y, efectivamente, ¡vemos una nueva suscripción allí!
También deberíamos poder darnos de baja con la misma facilidad.
>>> $ thread-> cancelar suscripción (52); => nulo
Ahora, cuando registramos la base de datos, esa suscripción que vimos hace solo un minuto ya no existe.
Implementación de una prueba de características de nivel superior
Comenzamos en el nivel de Unidad para obtener la funcionalidad más básica configurada para suscribirse y cancelar la suscripción a un hilo.
Desarrollar la primera prueba en el nivel de Función se ve así.
Vamos a necesitar una gran cantidad de rutas para admitir esta nueva función.
Una nueva clase ThreadSubscriptionsController
Configuramos algunas rutas que hacen referencia a la clase ThreadSubscriptionsController, pero todavía no tenemos esa clase.
vagrant @ homestead: ~ / Code / forumio $ php artisan make: controller ThreadSubscriptionsController Controlador creado con éxito.
También agregaremos un pequeño método happy store () en nuestro nuevo controlador.
La ejecución de nuestra prueba muestra que hemos hecho lo suficiente para aprobar esta prueba.
vagrant @ homestead: ~ / Code / forumio $ phpunit --filter test_a_user_can_subscribe_to_threads PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores. . Tiempo: 1.3 segundos, Memoria: 10.00MB OK (1 prueba, 1 afirmación)
Agregar un botón Suscribir a la interfaz de usuario
Los conceptos básicos del back-end ahora se desarrollan y, según las pruebas que hemos creado, parecen estar funcionando. hizo el botón
Completaremos SubscribeButton.vue así.
En Thread.vue necesitamos hacer referencia al nuevo componente en un par de puntos.
Finalmente, mostraremos el nuevo botón en nuestro archivo threads / show.blade.php como este.
Voila!
En realidad, se está produciendo una buena cantidad de comportamiento en los fragmentos anteriores y sigue los mismos conceptos que hemos estado cubriendo con respecto al trabajo con componentes Vue.
¿Está suscrito el hilo?
Deberíamos agregar un captador de atributos personalizado al modelo Thread para decirnos si un hilo está suscrito actualmente o no.
También configuraríamos la propiedad $ appends así.
Si simplemente devolvemos los datos con formato JSON del método show () en ThreadsController, vemos que tenemos acceso a esa información necesaria.
Estos son los datos que se envían cuando hacemos referencia
en hilos / show.blade.php.
Eliminar una suscripción
Todo funciona para hacer clic en el botón y ver una nueva suscripción en la base de datos.
Ahora, al hacer clic en el botón, se agrega una nueva suscripción.
Resumen del tutorial del sistema de suscripción Laravel
Este tutorial cubrió los conceptos básicos para configurar el código necesario para un sistema de suscripción para los usuarios de la aplicación.
0 Comentarios
Dejanos tu comentario para seguir mejorando!