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