Skip to content

Instantly share code, notes, and snippets.

View donrestarone's full-sized avatar
🤖
Building products

Don Restarone donrestarone

🤖
Building products
View GitHub Profile
@donrestarone
donrestarone / users_controller.rb
Created March 14, 2020 18:17
a simple users_controller that creates a user and sends them an email confirmation link
class Api::Core::V1::UsersController < ApplicationController
before_action except: [:create] do
authenticate_token
end
def create
first_name = params["first_name"]
last_name = params["last_name"]
email = params["email"]
phone = params["phone"]
password = params["password"]
@donrestarone
donrestarone / users_controller_spec.rb
Created March 14, 2020 18:22
a simple controller test that asserts if a user is created
require 'rails_helper'
RSpec.describe Api::Core::V1::UsersController, type: :controller do
it 'must be able to create a user when first_name, last_name, email and password are specified' do
post :create, params: {first_name: 'Cletus', last_name: 'Mccletus', email: 'cletus@mccletus.com', password: 'cletus12345', password_confirmation: 'cletus12345'}
response_body = JSON.parse(response.body)
expect(response_body.keys).to eql ["status", "code"]
expect(response_body["code"]).to eql 200
end
@donrestarone
donrestarone / user_confirmation_email_job.rb
Created March 14, 2020 18:27
a simple job for sending emails to users
class EmailConfirmationJob < ApplicationJob
queue_as :default
def perform(user_id)
user = User.find(user_id)
user.set_email_verification_sent
UserMailer.welcome_email_confirmation(user).deliver_now
end
end
@donrestarone
donrestarone / email_confirmation_job.rb
Created March 14, 2020 18:29
a simple job spec with rspec
require 'rails_helper'
require 'sidekiq/testing'
RSpec.describe EmailConfirmationJob, type: :job do
before(:each) do
@user = create_new_user
Sidekiq::Testing.inline!
end
it 'enqueues and changes the email_sent status to true' do
@donrestarone
donrestarone / user_mailer.rb
Created March 14, 2020 18:37
a simple userMailer that sends an email confirmation link
class UserMailer < ApplicationMailer
default from: 'you@yourdomain.com'
def welcome_email_confirmation(user)
@user = user
@email_confirmation_url = user.generate_email_confirmation_link
mail(to: user.email, subject: "Welcome to this generic SaaS product #{user.first_name.capitalize}! Please confirm your email" )
end
end
@donrestarone
donrestarone / user_mailer_spec.rb
Created March 14, 2020 18:39
a simple user_mailer spec
require "rails_helper"
RSpec.describe UserMailer, type: :mailer do
it 'sends a welcome email to user with password confirmation link' do
user = create_new_user
subject_line = "Welcome to this generic SaaS product #{user.first_name.capitalize}! Please confirm your email"
generated_email = UserMailer.welcome_email_confirmation(user)
expect(generated_email.subject).to eql subject_line
expect(generated_email.to[0]).to eql user.email
expect(generated_email.from[0]).to eql 'you@yourdomain.com'
@donrestarone
donrestarone / spec_helper.rb
Created March 14, 2020 18:42
simplecov configuration for rspec spec_helper
require 'simplecov'
SimpleCov.use_merging true
SimpleCov.start do
load_profile 'rails'
end
@donrestarone
donrestarone / test.rake
Created March 14, 2020 18:50
a simple rake task for running the full test suite
namespace :test do
desc "test entire app"
task :full_suite => [:environment] do
if !Rails.env.production?
coverage_folder = "#{Rails.root}/coverage"
sh("rm -rf #{coverage_folder}")
Rake::Task["db:drop"].invoke
Rake::Task["db:create"].invoke
Rake::Task["db:migrate"].invoke
sh("rails test --verbose")
@donrestarone
donrestarone / workflow.yml
Created March 14, 2020 19:26
a simple github workflow for testing rails apps
name: Ruby
on:
push:
branches:
- master
pull_request:
branches:
- master
@donrestarone
donrestarone / FriendsContainer.js
Created March 15, 2020 16:46
a functional-style react component that is redux & router connected.
import React, {useEffect} from 'react';
import { connect } from 'react-redux';
import './FriendsContainer.css';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faSortAmountDown } from '@fortawesome/free-solid-svg-icons';
import DropdownMenu from '../../../../Shared/Global/DropdownMenu/DropdownMenu';
import FriendCard from '../FriendCard/FriendCard';
import ErrorBox from '../../../../Shared/Global/ErrorBox/ErrorBox'
import {listFriendsByContext} from '../../../../../Services/Friends/ListFriends'
import {requestAuthenticationErrorHandler} from '../../../../../Utilities/AuthUtilities/Auth'