mirror of https://github.com/docusealco/docuseal
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							338 lines
						
					
					
						
							10 KiB
						
					
					
				
			
		
		
	
	
							338 lines
						
					
					
						
							10 KiB
						
					
					
				# frozen_string_literal: true
 | 
						|
 | 
						|
FactoryBot.define do
 | 
						|
  factory :template do
 | 
						|
    account
 | 
						|
 | 
						|
    author factory: %i[user]
 | 
						|
    name { Faker::Book.title }
 | 
						|
 | 
						|
    transient do
 | 
						|
      submitter_count { 1 }
 | 
						|
      only_field_types do
 | 
						|
        %w[text date checkbox radio signature number multiple select initials image file stamp cells phone payment]
 | 
						|
      end
 | 
						|
      except_field_types { [] }
 | 
						|
    end
 | 
						|
 | 
						|
    after(:create) do |template, ev|
 | 
						|
      blob = ActiveStorage::Blob.create_and_upload!(
 | 
						|
        io: Rails.root.join('spec/fixtures/sample-document.pdf').open,
 | 
						|
        filename: 'sample-document.pdf',
 | 
						|
        content_type: 'application/pdf'
 | 
						|
      )
 | 
						|
      attachment = ActiveStorage::Attachment.create!(
 | 
						|
        blob:,
 | 
						|
        name: :documents,
 | 
						|
        record: template
 | 
						|
      )
 | 
						|
 | 
						|
      Templates::ProcessDocument.call(attachment, attachment.download)
 | 
						|
 | 
						|
      template.schema = [{ attachment_uuid: attachment.uuid, name: 'sample-document' }]
 | 
						|
      number_words = %w[first second third fourth fifth sixth seventh eighth ninth tenth]
 | 
						|
 | 
						|
      template.submitters = Array.new(ev.submitter_count) do |i|
 | 
						|
        {
 | 
						|
          'name' => "#{number_words[i]&.capitalize} Party",
 | 
						|
          'uuid' => SecureRandom.uuid
 | 
						|
        }
 | 
						|
      end
 | 
						|
 | 
						|
      template.fields = template.submitters.reduce([]) do |fields, submitter|
 | 
						|
        fields += [
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'First Name',
 | 
						|
            'type' => 'text',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.09273546006944444,
 | 
						|
                'y' => 0.1099851117387033,
 | 
						|
                'w' => 0.2701497395833333,
 | 
						|
                'h' => 0.0372705365913556,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Birthday',
 | 
						|
            'type' => 'date',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => { 'format' => 'DD/MM/YYYY' },
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.09166666666666666,
 | 
						|
                'y' => 0.1762778204144282,
 | 
						|
                'w' => 0.2763888888888889,
 | 
						|
                'h' => 0.0359029261474578,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Do you agree?',
 | 
						|
            'type' => 'checkbox',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.09051106770833334,
 | 
						|
                'y' => 0.227587027259332,
 | 
						|
                'w' => 0.2784450954861111,
 | 
						|
                'h' => 0.04113074042239687,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'First child',
 | 
						|
            'type' => 'radio',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'options' => [
 | 
						|
              { 'value' => 'Girl', 'uuid' => SecureRandom.uuid },
 | 
						|
              { 'value' => 'Boy', 'uuid' => SecureRandom.uuid }
 | 
						|
            ],
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.09027777777777778,
 | 
						|
                'y' => 0.3020184190330008,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.02857142857142857,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Signature',
 | 
						|
            'type' => 'signature',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.08611111111111111,
 | 
						|
                'y' => 0.3487183422870299,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.0707269155206287,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'House number',
 | 
						|
            'type' => 'number',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.08333333333333333,
 | 
						|
                'y' => 0.4582041442824252,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.02857142857142857,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Colors',
 | 
						|
            'type' => 'multiple',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'options' => [
 | 
						|
              { 'value' => 'Red', 'uuid' => SecureRandom.uuid },
 | 
						|
              { 'value' => 'Green', 'uuid' => SecureRandom.uuid },
 | 
						|
              { 'value' => 'Blue', 'uuid' => SecureRandom.uuid }
 | 
						|
            ],
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.45,
 | 
						|
                'y' => 0.1133998465080583,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.02857142857142857,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Gender',
 | 
						|
            'type' => 'select',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'options' => [
 | 
						|
              { 'value' => 'Male', 'uuid' => SecureRandom.uuid },
 | 
						|
              { 'value' => 'Female', 'uuid' => SecureRandom.uuid }
 | 
						|
            ],
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.4513888888888889,
 | 
						|
                'y' => 0.1752954719877206,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.02857142857142857,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Initials',
 | 
						|
            'type' => 'initials',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.4486111111111111,
 | 
						|
                'y' => 0.2273599386032233,
 | 
						|
                'w' => 0.1,
 | 
						|
                'h' => 0.02857142857142857,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Avatar',
 | 
						|
            'type' => 'image',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.7180555555555556,
 | 
						|
                'y' => 0.1129547198772064,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.1414538310412574,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Attachment',
 | 
						|
            'type' => 'file',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.7166666666666667,
 | 
						|
                'y' => 0.3020107444359171,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.02857142857142857,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Stamp',
 | 
						|
            'type' => 'stamp',
 | 
						|
            'required' => true,
 | 
						|
            'readonly' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.7166666666666667,
 | 
						|
                'y' => 0.3771910974673829,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.0707269155206287,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Cell code',
 | 
						|
            'type' => 'cells',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.4472222222222222,
 | 
						|
                'y' => 0.3530851880276286,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.02857142857142857,
 | 
						|
                'cell_w' => 0.04,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Payment',
 | 
						|
            'type' => 'payment',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => { 'currency' => 'EUR', 'price' => 1000 },
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.4486111111111111,
 | 
						|
                'y' => 0.43168073676132,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.02857142857142857,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          },
 | 
						|
          {
 | 
						|
            'uuid' => SecureRandom.uuid,
 | 
						|
            'submitter_uuid' => submitter['uuid'],
 | 
						|
            'name' => 'Mobile Phone',
 | 
						|
            'type' => 'phone',
 | 
						|
            'required' => true,
 | 
						|
            'preferences' => {},
 | 
						|
            'areas' => [
 | 
						|
              {
 | 
						|
                'x' => 0.44443359375,
 | 
						|
                'y' => 0.3010283960092095,
 | 
						|
                'w' => 0.2,
 | 
						|
                'h' => 0.02857142857142857,
 | 
						|
                'attachment_uuid' => attachment.uuid,
 | 
						|
                'page' => 0
 | 
						|
              }
 | 
						|
            ]
 | 
						|
          }
 | 
						|
        ].select { |f| ev.only_field_types.include?(f['type']) && ev.except_field_types.exclude?(f['type']) }
 | 
						|
 | 
						|
        fields
 | 
						|
      end
 | 
						|
 | 
						|
      template.save!
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |