Added email notifications for new dotations
This commit is contained in:
parent
f5b9f8bafe
commit
6903ac1418
|
|
@ -0,0 +1,2 @@
|
|||
// Place all the behaviors and hooks related to the matching controller here.
|
||||
// All this logic will automatically be available in application.js.
|
||||
|
|
@ -37,6 +37,8 @@ class DotationsController < ApplicationController
|
|||
false
|
||||
end
|
||||
@dotation.save
|
||||
|
||||
NotifyEmailsJob.perform_later(@dotation.id) if @dotation.active.eql?(true)
|
||||
end
|
||||
|
||||
# POST /dotations or /dotations.json
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Emails
|
||||
class EmailFilterController < ApplicationController
|
||||
layout 'home_layout'
|
||||
def unsubscribe
|
||||
@email_filter =
|
||||
FilterForEmail.by_email(params[:i]).by_unique(params[:k]).first
|
||||
@email_filter.destroy unless @email_filter.blank?
|
||||
end
|
||||
end
|
||||
|
|
@ -5,13 +5,17 @@ class HomeController < ApplicationController
|
|||
layout 'home_layout'
|
||||
|
||||
def index
|
||||
require 'json'
|
||||
prepare_filters
|
||||
cookies[:filter] = JSON.generate(build_filter_hash)
|
||||
@dotations = Dotation.extra_search(params[:search]).public_dot
|
||||
.point_desc.end_date_asc.page(params[:page])
|
||||
end
|
||||
|
||||
def search
|
||||
require 'json'
|
||||
prepare_filters
|
||||
cookies[:filter] = JSON.generate(build_filter_hash)
|
||||
@dotations = Dotation.search_with_filters(build_filter_hash).public_dot
|
||||
.point_desc.end_date_asc.page(params[:page])
|
||||
end
|
||||
|
|
@ -23,6 +27,16 @@ class HomeController < ApplicationController
|
|||
@company_sizes = CompanySize.all
|
||||
end
|
||||
|
||||
def emailfilter
|
||||
require 'json'
|
||||
@emailfilter = FilterForEmail.new(
|
||||
email: params[:email_filter_inp],
|
||||
filters: JSON.parse(cookies[:filter])
|
||||
)
|
||||
@emailfilter.save
|
||||
SendNotifyEmailJob.perform_later(@emailfilter.id, 1)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def prepare_filters
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
module EmailFilterHelper
|
||||
end
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
class GeneratePdfJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(*args)
|
||||
# Do something later
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Job for async email notifications
|
||||
class NotifyEmailsJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(dotation_id)
|
||||
NotifyEmailService.new(dotation_id).call
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class SendNotifyEmailJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(email_id, mail_type)
|
||||
email_filter = FilterForEmail.where(id: email_id).first
|
||||
return unless email_filter
|
||||
|
||||
if mail_type == 1
|
||||
NewDotationMailer.with(email_filter: email_filter.id).welcome_email
|
||||
.deliver
|
||||
elsif mail_type == 2
|
||||
NewDotationMailer.with(email_filter: email_filter.id).notification_email
|
||||
.deliver
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Mailer for dotations
|
||||
class NewDotationMailer < ApplicationMailer
|
||||
default from: 'kalendarzdotacji@gmail.com'
|
||||
|
||||
def welcome_email
|
||||
@email_filter = FilterForEmail.where(id: params[:email_filter]).first
|
||||
@email_params = {
|
||||
i: @email_filter.email,
|
||||
k: @email_filter.unique_name
|
||||
}
|
||||
# @emailfilter = FilterForEmail.find(params[:emailfilter])
|
||||
mail(to: @email_filter.email, subject: 'Dodano subskrypcję dla nowych dotacji')
|
||||
end
|
||||
|
||||
def notification_email
|
||||
@email_filter = FilterForEmail.where(id: params[:email_filter]).first
|
||||
@dotation = Dotation.where(id: params[:dotation_id]).first
|
||||
@email_params = {
|
||||
i: @email_filter.email,
|
||||
k: @email_filter.unique_name
|
||||
}
|
||||
mail(to: @email_filter.email, subject: 'Pojawiła się nowa dotacja')
|
||||
end
|
||||
end
|
||||
|
|
@ -64,6 +64,7 @@ class Dotation < ApplicationRecord
|
|||
scope :point_desc, -> { order(points: :desc) }
|
||||
scope :end_date_asc, -> { order(end_date: :asc) }
|
||||
scope :public_dot, -> { where(active: true) }
|
||||
scope :by_id, ->(val) { where(id: val) }
|
||||
# == Callbacks ============================================================
|
||||
|
||||
# == Class Methods ========================================================
|
||||
|
|
@ -90,4 +91,8 @@ class Dotation < ApplicationRecord
|
|||
ret
|
||||
end
|
||||
# == Instance Methods =====================================================
|
||||
|
||||
def safe_id
|
||||
id
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Emails with filters for customers
|
||||
class FilterForEmail < ApplicationRecord
|
||||
# == Constants ============================================================
|
||||
|
||||
# == Attributes ===========================================================
|
||||
serialize :filters, Hash
|
||||
# == Extensions ===========================================================
|
||||
|
||||
# == Relationships ========================================================
|
||||
has_many :sent_email_filters, dependent: :destroy
|
||||
# == Validations ==========================================================
|
||||
|
||||
# == Scopes ===============================================================
|
||||
scope :by_email, ->(val) { where(email: val) }
|
||||
scope :by_unique, ->(val) { where(unique_name: val) }
|
||||
# == Callbacks ============================================================
|
||||
after_create :a_create
|
||||
# == Class Methods ========================================================
|
||||
|
||||
# == Instance Methods =====================================================
|
||||
def a_create
|
||||
o = [('a'..'z'), ('A'..'Z')].map(&:to_a).flatten
|
||||
self.unique_name = (0...50).map { o[rand(o.length)] }.join
|
||||
save
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# sent emails
|
||||
class SentEmailFilter < ApplicationRecord
|
||||
# == Constants ============================================================
|
||||
|
||||
# == Attributes ===========================================================
|
||||
|
||||
# == Extensions ===========================================================
|
||||
|
||||
# == Relationships ========================================================
|
||||
belongs_to :dotation
|
||||
belongs_to :filter_for_email
|
||||
# == Validations ==========================================================
|
||||
|
||||
# == Scopes ===============================================================
|
||||
scope :by_dotation, ->(val) { where(dotation_id: val) }
|
||||
scope :by_filter, ->(val) { where(filter_for_email_id: val) }
|
||||
# == Callbacks ===================== =======================================
|
||||
|
||||
# == Class Methods ========================================================
|
||||
|
||||
# == Instance Methods =====================================================
|
||||
end
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Popup service
|
||||
class NotifyEmailService
|
||||
|
||||
def initialize(dotation_id)
|
||||
@dotation_id = dotation_id
|
||||
end
|
||||
|
||||
def call
|
||||
check_filters
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def check_filters
|
||||
filter_for_emails = FilterForEmail.all
|
||||
filter_for_emails.each do |filter_for_email|
|
||||
hsh = filter_for_email.filters.transform_keys(&:to_sym)
|
||||
dot = Dotation.search_with_filters(hsh)
|
||||
.by_id(@dotation_id).public_dot.first
|
||||
next if dot.blank?
|
||||
|
||||
sef =
|
||||
SentEmailFilter.by_dotation(dot.id).by_filter(filter_for_email.id).first
|
||||
|
||||
next unless sef.blank?
|
||||
|
||||
SentEmailFilter.create(filter_for_email_id: filter_for_email.id,
|
||||
dotation_id: dot.id)
|
||||
NewDotationMailer.with(dotation_id: dot.id,
|
||||
email_filter: filter_for_email.id)
|
||||
.notification_email.deliver
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<section class="content-header">
|
||||
<div class="container-fluid">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-2">
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<h1>Rezygnacja z subskrypcji</h1>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-md-2"></div>
|
||||
<div class="col-md-8">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3 class="card-title">Subskrybcje</h3>
|
||||
<div class="card-tools">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="alert alert-info">
|
||||
<h5><i class="icon fas fa-info"></i> Informacja</h5>
|
||||
Subskrybcja została usunięta
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-md-2"></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
|
@ -42,7 +42,7 @@
|
|||
<div class="card-header">
|
||||
<h4 class="card-title w-100">
|
||||
<a class="d-block w-100" data-toggle="collapse" href="#collapseTwo" aria-expanded="true">
|
||||
Dominująca działalność firmy
|
||||
Działalność firmy
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
|
|
@ -133,36 +133,10 @@
|
|||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<button type="button" class="btn btn-block btn-outline-success" data-toggle="modal" data-target="#modal-lg">
|
||||
<i class="fas fa-bullhorn"></i> Powiadom mnie o wynikach
|
||||
<i class="fas fa-bullhorn"></i> Powiadom mnie o nowych dotacjach
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="modal-lg" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Powiadomienie o nowych wynikach</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="exampleInputEmail1">Podaj swój adres e-mail</label>
|
||||
<input type="email" class="form-control" id="exampleInputEmail1" placeholder="Wprowadź e-mail">
|
||||
</div>
|
||||
<div class="callout callout-info">
|
||||
<h5>Ważne informacje</h5>
|
||||
<p>Podając adres e-mail wyrażasz zgodę na otrzymywanie wiadomości o wynikach wyszukiwania spełniających wybrane przez Ciebie kryteria</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Zamknij</button>
|
||||
<button type="button" class="btn btn-primary">Zapisz powiadomienie</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
$("#modal-lg").modal('hide');
|
||||
|
|
@ -13,7 +13,6 @@
|
|||
<br />
|
||||
</div>
|
||||
<div class="col-md-2"></div>
|
||||
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-8 offset-md-2">
|
||||
|
|
@ -33,3 +32,32 @@
|
|||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div class="modal fade" id="modal-lg" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<%= form_tag(home_emailfilter_path, method: :post, remote: true, id: 'email_filter_form') do %>
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="exampleModalLabel">Powiadomienie o nowych dotacjach</h5>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="email_filter_inp">Podaj swój adres e-mail</label>
|
||||
<input type="email" class="form-control" name="email_filter_inp" id="email_filter_inp" placeholder="Wprowadź e-mail">
|
||||
</div>
|
||||
<%= hidden_field_tag 'filter', @filter_hash %>
|
||||
<div class="callout callout-info">
|
||||
<h5>Ważne informacje</h5>
|
||||
<p>Podając adres e-mail wyrażasz zgodę na otrzymywanie wiadomości o wynikach wyszukiwania spełniających wybrane przez Ciebie kryteria</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Zamknij</button>
|
||||
<button type="submit" class="btn btn-primary">Zapisz powiadomienie</button>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -2,9 +2,7 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<style>
|
||||
/* Email styles need to be inline */
|
||||
</style>
|
||||
<style></style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
<table style="font-family:Verdana,sans-serif; font-size:18px; color:#374953;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left">
|
||||
Witaj, <strong style="color:#0cd4d2;"><%= @email_filter.email %></strong><br />
|
||||
Pojawiła się nowa dotacja, która spełnia warunki Twojego wyszukiwania.<br />
|
||||
Aby zobaczyć tą dotację kliknij <%= link_to 'pokaż dotację', "#{APP_CONFIG['mail_link']}/dotacja/#{@dotation.safe_id}" %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jeśli to nie Ty poprosiłeś o dodanie Ciebie do listy, możesz usunąć tą prośbę klikając w link <%= link_to 'Zrezygnuj', "#{APP_CONFIG['mail_link']}/zrezygnuj?#{@email_params.to_query}" %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="font-family:Verdana,sans-serif; font-size:14px; color:#374953;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>UWAGA! Prosimy nie odpowiadać na tą wiadomość, została ona automatycznie wygenerowana przez system</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
<table style="font-family:Verdana,sans-serif; font-size:18px; color:#374953;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left">Witaj, <strong style="color:#0cd4d2;"><%= @email_filter.email %></strong><br />przyjęliśmy Twoją prośbę o informowanie Ciebie gdy pojawią się nowe dotacje.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Jeśli to nie Ty poprosiłeś o dodanie Ciebie do listy, możesz usunąć tą prośbę klikając w link <%= link_to 'Zrezygnuj', "#{APP_CONFIG['mail_link']}/zrezygnuj?#{@email_params.to_query}" %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table style="font-family:Verdana,sans-serif; font-size:14px; color:#374953;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>UWAGA! Prosimy nie odpowiadać na tą wiadomość, została ona automatycznie wygenerowana przez system</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
@ -0,0 +1 @@
|
|||
Witaj
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
require_relative 'boot'
|
||||
|
||||
require 'rails/all'
|
||||
|
||||
# Require the gems listed in Gemfile, including any gems
|
||||
# you've limited to :test, :development, or :production.
|
||||
Bundler.require(*Rails.groups)
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
mail_link: 'http://localhost:3434'
|
||||
|
|
@ -3,3 +3,5 @@ require_relative 'application'
|
|||
|
||||
# Initialize the Rails application.
|
||||
Rails.application.initialize!
|
||||
|
||||
APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml").freeze
|
||||
|
|
|
|||
|
|
@ -34,8 +34,17 @@ Rails.application.configure do
|
|||
config.action_mailer.raise_delivery_errors = false
|
||||
|
||||
config.action_mailer.perform_caching = false
|
||||
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
|
||||
|
||||
config.action_mailer.default_url_options = { host: 'localhost', port: 3434 }
|
||||
config.action_mailer.delivery_method = :smtp
|
||||
config.action_mailer.smtp_settings = {
|
||||
address: 'smtp.gmail.com',
|
||||
port: 587,
|
||||
domain: 'kalendarzdotacji.pl',
|
||||
user_name: 'kalendarzdotacji@gmail.com',
|
||||
password: '498FAvFd4YBapu5',
|
||||
authentication: 'plain',
|
||||
enable_starttls_auto: true
|
||||
}
|
||||
# Print deprecation notices to the Rails logger.
|
||||
config.active_support.deprecation = :log
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
Rails.application.routes.draw do
|
||||
|
||||
get 'zrezygnuj' => 'email_filter#unsubscribe'
|
||||
get 'email_filter/unsubscribe'
|
||||
get 'kontakt' => 'home#contact'
|
||||
get 'dotacja/:id' => 'home#show'
|
||||
get 'home/search'
|
||||
post 'home/search'
|
||||
post 'home/emailfilter'
|
||||
resources :home, only: %i[index show]
|
||||
devise_for :users
|
||||
resources :company_sizes
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
class CreateFilterForEmails < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :filter_for_emails do |t|
|
||||
t.string :email
|
||||
t.string :unique_name
|
||||
t.text :filters
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
class CreateSentEmailFilters < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :sent_email_filters do |t|
|
||||
t.bigint :filter_for_email_id
|
||||
t.bigint :dotation_id
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
||||
26
db/schema.rb
26
db/schema.rb
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2022_02_24_074408) do
|
||||
ActiveRecord::Schema.define(version: 2022_03_11_073315) do
|
||||
|
||||
create_table "active_storage_attachments", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
||||
t.string "name", null: false
|
||||
|
|
@ -75,8 +75,10 @@ ActiveRecord::Schema.define(version: 2022_02_24_074408) do
|
|||
t.string "formal_name"
|
||||
t.date "date_from"
|
||||
t.date "date_to"
|
||||
t.integer "min_amount"
|
||||
t.integer "max_amount"
|
||||
t.bigint "min_amount"
|
||||
t.integer "min_amount_curr_id", default: 1, null: false
|
||||
t.bigint "max_amount"
|
||||
t.integer "max_amount_curr_id", default: 1, null: false
|
||||
t.integer "max_percent"
|
||||
t.text "localization"
|
||||
t.integer "company_size_id"
|
||||
|
|
@ -88,7 +90,7 @@ ActiveRecord::Schema.define(version: 2022_02_24_074408) do
|
|||
t.datetime "announcement_date"
|
||||
t.text "full_descr", limit: 4294967295
|
||||
t.text "positioning_text", limit: 4294967295
|
||||
t.integer "points"
|
||||
t.integer "points", default: 1
|
||||
t.datetime "date_of_recruitment"
|
||||
t.boolean "arch", default: false
|
||||
t.boolean "active", default: false
|
||||
|
|
@ -144,9 +146,16 @@ ActiveRecord::Schema.define(version: 2022_02_24_074408) do
|
|||
t.datetime "updated_at", null: false
|
||||
end
|
||||
|
||||
create_table "filter_for_emails", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
||||
t.string "email"
|
||||
t.text "filters"
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
end
|
||||
|
||||
create_table "partners", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "description"
|
||||
t.text "description"
|
||||
t.string "link_url"
|
||||
t.integer "created_by"
|
||||
t.integer "updated_by"
|
||||
|
|
@ -176,6 +185,13 @@ ActiveRecord::Schema.define(version: 2022_02_24_074408) do
|
|||
t.index ["user_id", "role_id"], name: "index_roles_users_on_user_id_and_role_id"
|
||||
end
|
||||
|
||||
create_table "sent_email_filters", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
||||
t.bigint "filter_for_email_id"
|
||||
t.bigint "dotation_id"
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
end
|
||||
|
||||
create_table "tags", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "description"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
require 'test_helper'
|
||||
|
||||
class EmailFilterControllerTest < ActionDispatch::IntegrationTest
|
||||
test "should get unsubscribe" do
|
||||
get email_filter_unsubscribe_url
|
||||
assert_response :success
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
||||
|
||||
one:
|
||||
email: MyString
|
||||
filters: MyText
|
||||
sended_emails: 1
|
||||
|
||||
two:
|
||||
email: MyString
|
||||
filters: MyText
|
||||
sended_emails: 1
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
||||
|
||||
one:
|
||||
filter_for_email_id:
|
||||
dotation_id:
|
||||
|
||||
two:
|
||||
filter_for_email_id:
|
||||
dotation_id:
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
require 'test_helper'
|
||||
|
||||
class GeneratePdfJobTest < ActiveJob::TestCase
|
||||
# test "the truth" do
|
||||
# assert true
|
||||
# end
|
||||
end
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
require 'test_helper'
|
||||
|
||||
class SendNotifyEmailJobTest < ActiveJob::TestCase
|
||||
# test "the truth" do
|
||||
# assert true
|
||||
# end
|
||||
end
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
require 'test_helper'
|
||||
|
||||
class NewDotationMailerTest < ActionMailer::TestCase
|
||||
# test "the truth" do
|
||||
# assert true
|
||||
# end
|
||||
end
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
# Preview all emails at http://localhost:3000/rails/mailers/new_dotation_mailer
|
||||
class NewDotationMailerPreview < ActionMailer::Preview
|
||||
|
||||
end
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
require 'test_helper'
|
||||
|
||||
class FilterForEmailTest < ActiveSupport::TestCase
|
||||
# test "the truth" do
|
||||
# assert true
|
||||
# end
|
||||
end
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
require 'test_helper'
|
||||
|
||||
class SentEmailFilterTest < ActiveSupport::TestCase
|
||||
# test "the truth" do
|
||||
# assert true
|
||||
# end
|
||||
end
|
||||
Loading…
Reference in New Issue