github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/tests/system/lib/contact.rb (about)

     1  class Contact
     2    include Model
     3  
     4    attr_reader :name, :fullname, :emails, :addresses, :phones, :cozy, :me, :group_ids
     5  
     6    def self.doctype
     7      "io.cozy.contacts"
     8    end
     9  
    10    def initialize(opts = {})
    11      first = opts[:given_name] || Faker::Name.first_name
    12      last = opts[:family_name] || Faker::Name.last_name
    13      @name = opts[:name] || { given_name: first, familyName: last }
    14      @fullname = opts[:fullname] || "#{first} #{last}"
    15  
    16      email = opts[:email] || Faker::Internet.email(name: [first, last, @fullname].sample)
    17      @emails = opts[:emails] || [{ address: email }]
    18  
    19      @addresses = opts[:addresses] || [{
    20        street: opts[:street] || Faker::Address.street_name,
    21        city: opts[:city] || Faker::Address.city,
    22        post_code: opts[:post_code] || Faker::Address.postcode
    23      }]
    24  
    25      phone = opts[:phone] || Faker::PhoneNumber.cell_phone
    26      @phones = [{ number: phone }]
    27      @cozy = opts[:cozy]
    28      @me = opts[:me] || false
    29      @group_ids = opts[:groups] || []
    30    end
    31  
    32    def self.from_json(j)
    33      contact = Contact.new(
    34        name: j["name"] || {},
    35        fullname: j["fullname"] || "",
    36        emails: j["email"] || "",
    37        cozy: j["cozy"] || [],
    38        addresses: j["address"] || [],
    39        phone: j["phone"] || "",
    40        me: j["me"]
    41      )
    42      contact.couch_id = j["_id"]
    43      contact.couch_rev = j["_rev"]
    44      contact
    45    end
    46  
    47    def primary_email
    48      @emails.dig 0, :address
    49    end
    50  
    51    def as_json
    52      {
    53        name: @name,
    54        fullname: @fullname,
    55        email: @emails,
    56        cozy: @cozy,
    57        address: @addresses,
    58        phone: @phones,
    59        relationships: {
    60          groups: {
    61            data: @group_ids.map do |id|
    62              { "_id": id, "_type": Group.doctype }
    63            end
    64          }
    65        }
    66      }
    67    end
    68  end