diff --git a/app/models/transaction/clearbit_enrichment.rb b/app/models/transaction/clearbit_enrichment.rb index c42a6c731..6c87e42c6 100644 --- a/app/models/transaction/clearbit_enrichment.rb +++ b/app/models/transaction/clearbit_enrichment.rb @@ -149,6 +149,15 @@ class Transaction::ClearbitEnrichment # create new organization if !external_syn_organization + # if organization is already assigned, do not create a new one + if user.organization_id + if user_has_changed + user.save + Observer::Transaction.commit + end + return + end + # can't create organization without name if organization_sync_values['organization.name'].empty? Observer::Transaction.commit diff --git a/test/fixtures/clearbit/testing3@znuny.com.json b/test/fixtures/clearbit/testing3@znuny.com.json new file mode 100644 index 000000000..49668fc91 --- /dev/null +++ b/test/fixtures/clearbit/testing3@znuny.com.json @@ -0,0 +1,96 @@ +{ + "person": null, + "company": { + "id": "273d8666-9d70-43dc-836b-a47a88293905-3", + "name": "Znuny / ES for OTRS", + "legalName": null, + "domain": "znuny.com", + "domainAliases": [ + "znuny.de" + ], + "url": "http://znuny.com", + "site": { + "url": "http://znuny.com", + "title": "Support, Consulting, Development and Training for OTRS - Znuny GmbH", + "h1": "We make OTRS support easy!", + "metaDescription": "OTRS Support, Consulting, Development, Training and Customizing - Znuny GmbH", + "metaAuthor": null, + "phoneNumbers": [ + "+49 30 6098541", + "+49 4107 15880339", + "+49 8601 81017925", + "+49 4107 15880186", + "+49 8602 16139061" + ], + "emailAddresses": [ + "info@znuny.com" + ] + }, + "category": { + "sector": "Industrials", + "industryGroup": "Commercial & Professional Services", + "industry": "Professional Services", + "subIndustry": "Consulting" + }, + "tags": [ + "Consulting & Professional Services", + "Corporate & Business", + "Information Technology & Services" + ], + "description": "OTRS Support, Consulting, Development, Training and Customizing - Znuny GmbH", + "foundedDate": null, + "location": "Marienstraße 11, 10117 Berlin, Germany", + "timeZone": "Europe/Berlin", + "utcOffset": 2, + "geo": { + "streetNumber": "11", + "streetName": "Marienstraße", + "subPremise": null, + "city": "Berlin", + "postalCode": "10117", + "state": "Berlin", + "stateCode": "Berlin", + "country": "Germany", + "countryCode": "DE", + "lat": 52.52182, + "lng": 13.38268 + }, + "logo": "https://logo.clearbit.com/znuny.com", + "facebook": { + "handle": null + }, + "linkedin": { + "handle": "company/znuny-gmbh" + }, + "twitter": { + "handle": "znuny", + "id": "293437546", + "bio": "Enterprise Services for OTRS! We love to do what we can do!", + "followers": 85, + "following": 63, + "location": "Berlin", + "site": "http://t.co/miuzrhoHeG", + "avatar": "https://pbs.twimg.com/profile_images/2460325455/hix7so4b0h0miq9gwkw8_normal.png" + }, + "crunchbase": { + "handle": null + }, + "emailProvider": false, + "type": "private", + "ticker": null, + "phone": null, + "metrics": { + "alexaUsRank": null, + "alexaGlobalRank": 10086408, + "googleRank": 3, + "employees": null, + "marketCap": null, + "raised": null, + "annualRevenue": null + }, + "tech": [ + "google_analytics", + "ruby_on_rails" + ] + } +} \ No newline at end of file diff --git a/test/fixtures/clearbit/testing4@znuny.com.json b/test/fixtures/clearbit/testing4@znuny.com.json index 9bef810d3..ed3d64d5e 100644 --- a/test/fixtures/clearbit/testing4@znuny.com.json +++ b/test/fixtures/clearbit/testing4@znuny.com.json @@ -1,16 +1,40 @@ { - "person": null, + "person": { + "id": "4db7cfeb-8017-4aac-b4b9-debb6d3142c0-4", + "name": { + "fullName": "Fred Jupiter", + "givenName": "Fred", + "familyName": "Jupiter" + }, + "email": "testing4@znuny.com", + "gender": null, + "location": "Berlin, Berlin, DE", + "timeZone": "Europe/Berlin", + "utcOffset": 2, + "geo": { + "city": "Berlin", + "state": "Berlin", + "stateCode": "Berlin", + "country": "Germany", + "countryCode": "DE", + "lat": 52.52000659999999, + "lng": 13.404954 + }, + "bio": "some_fred_bio", + "site": "http://example.com/", + "avatar": "https://d1ts43dypk8bqh.cloudfront.net/v1/avatars/4db7cfeb-8017-4aac-b4b9-debb6d3142c0" + }, "company": { - "id": "273d8666-9d70-43dc-836b-a47a88293905", - "name": "Znuny / ES for OTRS", + "id": "273d8666-9d70-43dc-836b-a47a88293905-4", + "name": "ZnunyOfFred", "legalName": null, - "domain": "znuny.com", + "domain": "fred.znuny.com", "domainAliases": [ "znuny.de" ], - "url": "http://znuny.com", + "url": "http://fred.znuny.com", "site": { - "url": "http://znuny.com", + "url": "http://fred.znuny.com", "title": "Support, Consulting, Development and Training for OTRS - Znuny GmbH", "h1": "We make OTRS support easy!", "metaDescription": "OTRS Support, Consulting, Development, Training and Customizing - Znuny GmbH", @@ -37,7 +61,7 @@ "Corporate & Business", "Information Technology & Services" ], - "description": "OTRS Support, Consulting, Development, Training and Customizing - Znuny GmbH", + "description": "ZnunyOfFred GmbH", "foundedDate": null, "location": "Marienstraße 11, 10117 Berlin, Germany", "timeZone": "Europe/Berlin", diff --git a/test/fixtures/clearbit/testing5@znuny.com.json b/test/fixtures/clearbit/testing5@znuny.com.json index e74f92d8f..193cde231 100644 --- a/test/fixtures/clearbit/testing5@znuny.com.json +++ b/test/fixtures/clearbit/testing5@znuny.com.json @@ -1,10 +1,10 @@ { "person": { - "id": "4db7cfeb-8017-4aac-b4b9-debb6d3142c0-1", + "id": "4db7cfeb-8017-4aac-b4b9-debb6d3142c0-5", "name": { - "fullName": "Bob Smith", - "givenName": "Bob", - "familyName": "Smith" + "fullName": "Alex Dont", + "givenName": "Alex", + "familyName": "Dont" }, "email": "testing5@znuny.com", "gender": null, @@ -20,14 +20,14 @@ "lat": 52.52000659999999, "lng": 13.404954 }, - "bio": "some_bio", + "bio": "some_bio_alex", "site": "http://example.com/", "avatar": "https://d1ts43dypk8bqh.cloudfront.net/v1/avatars/4db7cfeb-8017-4aac-b4b9-debb6d3142c0" }, "company": { - "id": "273d8666-9d70-43dc-836b-a47a88293905", - "name": "Znuny2", - "legalName": null, + "id": "273d8666-9d70-43dc-836b-a47a88293905-3", + "name": "Znuny / ES for OTRS", + "legalName": "Znuny GmbH", "domain": "znuny.com", "domainAliases": [ "znuny.de" @@ -61,7 +61,7 @@ "Corporate & Business", "Information Technology & Services" ], - "description": "Znuny2 GmbH", + "description": "OTRS Support, Consulting, Development, Training and Customizing - Znuny GmbH", "foundedDate": null, "location": "Marienstraße 11, 10117 Berlin, Germany", "timeZone": "Europe/Berlin", diff --git a/test/fixtures/clearbit/testing6@znuny.com.json b/test/fixtures/clearbit/testing6@znuny.com.json new file mode 100644 index 000000000..e808a12c6 --- /dev/null +++ b/test/fixtures/clearbit/testing6@znuny.com.json @@ -0,0 +1,120 @@ +{ + "person": { + "id": "4db7cfeb-8017-4aac-b4b9-debb6d3142c0-5", + "name": { + "fullName": "Bob Smith", + "givenName": "Bob", + "familyName": "Smith" + }, + "email": "testing6@znuny.com", + "gender": null, + "location": "Berlin, Berlin, DE", + "timeZone": "Europe/Berlin", + "utcOffset": 2, + "geo": { + "city": "Berlin", + "state": "Berlin", + "stateCode": "Berlin", + "country": "Germany", + "countryCode": "DE", + "lat": 52.52000659999999, + "lng": 13.404954 + }, + "bio": "some_bio", + "site": "http://example.com/", + "avatar": "https://d1ts43dypk8bqh.cloudfront.net/v1/avatars/4db7cfeb-8017-4aac-b4b9-debb6d3142c0" + }, + "company": { + "id": "273d8666-9d70-43dc-836b-a47a88293905-5", + "name": "Znuny2", + "legalName": null, + "domain": "znuny.com", + "domainAliases": [ + "znuny.de" + ], + "url": "http://znuny.com", + "site": { + "url": "http://znuny.com", + "title": "Support, Consulting, Development and Training for OTRS - Znuny GmbH", + "h1": "We make OTRS support easy!", + "metaDescription": "OTRS Support, Consulting, Development, Training and Customizing - Znuny GmbH", + "metaAuthor": null, + "phoneNumbers": [ + "+49 30 6098541", + "+49 4107 15880339", + "+49 8601 81017925", + "+49 4107 15880186", + "+49 8602 16139061" + ], + "emailAddresses": [ + "info@znuny.com" + ] + }, + "category": { + "sector": "Industrials", + "industryGroup": "Commercial & Professional Services", + "industry": "Professional Services", + "subIndustry": "Consulting" + }, + "tags": [ + "Consulting & Professional Services", + "Corporate & Business", + "Information Technology & Services" + ], + "description": "Znuny2 GmbH", + "foundedDate": null, + "location": "Marienstraße 11, 10117 Berlin, Germany", + "timeZone": "Europe/Berlin", + "utcOffset": 2, + "geo": { + "streetNumber": "11", + "streetName": "Marienstraße", + "subPremise": null, + "city": "Berlin", + "postalCode": "10117", + "state": "Berlin", + "stateCode": "Berlin", + "country": "Germany", + "countryCode": "DE", + "lat": 52.52182, + "lng": 13.38268 + }, + "logo": "https://logo.clearbit.com/znuny.com", + "facebook": { + "handle": null + }, + "linkedin": { + "handle": "company/znuny-gmbh" + }, + "twitter": { + "handle": "znuny", + "id": "293437546", + "bio": "Enterprise Services for OTRS! We love to do what we can do!", + "followers": 85, + "following": 63, + "location": "Berlin", + "site": "http://t.co/miuzrhoHeG", + "avatar": "https://pbs.twimg.com/profile_images/2460325455/hix7so4b0h0miq9gwkw8_normal.png" + }, + "crunchbase": { + "handle": null + }, + "emailProvider": false, + "type": "private", + "ticker": null, + "phone": null, + "metrics": { + "alexaUsRank": null, + "alexaGlobalRank": 10086408, + "googleRank": 3, + "employees": null, + "marketCap": null, + "raised": null, + "annualRevenue": null + }, + "tech": [ + "google_analytics", + "ruby_on_rails" + ] + } +} \ No newline at end of file diff --git a/test/integration/clearbit_test.rb b/test/integration/clearbit_test.rb index c04de701f..54171cb0d 100644 --- a/test/integration/clearbit_test.rb +++ b/test/integration/clearbit_test.rb @@ -160,7 +160,7 @@ class ClearbitTest < ActiveSupport::TestCase customer3 = User.create( firstname: '', lastname: '', - email: 'testing4@znuny.com', + email: 'testing3@znuny.com', note: '', updated_by_id: 1, created_by_id: 1, @@ -186,12 +186,13 @@ class ClearbitTest < ActiveSupport::TestCase assert_equal(false, organization3_lookup.shared) assert_equal('OTRS Support, Consulting, Development, Training and Customizing - Znuny GmbH', organization3_lookup.note) - # case 4 - no person / real api call + # case 4 - person with organization but organization is already assigned (own created) customer4 = User.create( firstname: '', lastname: '', - email: 'testing5@clearbit.com', + email: 'testing4@znuny.com', note: '', + organization_id: 1, updated_by_id: 1, created_by_id: 1, ) @@ -200,21 +201,81 @@ class ClearbitTest < ActiveSupport::TestCase Observer::Transaction.commit Delayed::Worker.new.work_off - assert_not(ExternalSync.find_by(source: 'clearbit', object: 'User', o_id: customer4.id)) + assert(ExternalSync.find_by(source: 'clearbit', object: 'User', o_id: customer4.id)) customer4_lookup = User.lookup(id: customer4.id) assert_not_equal(customer4.updated_at, customer4_lookup.updated_at) - assert_equal('', customer4_lookup.firstname) - assert_equal('', customer4_lookup.lastname) - assert_equal('', customer4_lookup.note) - assert_equal('http://clearbit.com', customer4_lookup.web) - assert_equal('', customer4_lookup.address) + assert_equal('Fred', customer4_lookup.firstname) + assert_equal('Jupiter', customer4_lookup.lastname) + assert_equal('some_fred_bio', customer4_lookup.note) + assert_equal('http://fred.znuny.com', customer4_lookup.web) + assert_equal('Marienstraße 11, 10117 Berlin, Germany', customer4_lookup.address) - organization4_lookup = Organization.find_by(name: 'Clearbit') - assert(ExternalSync.find_by(source: 'clearbit', object: 'Organization', o_id: organization4_lookup.id)) - assert_equal(false, organization4_lookup.shared) - assert_equal('Clearbit provides powerful products and data APIs to help your business grow. Contact enrichment, lead generation, financial compliance, and more...', organization4_lookup.note) + organization4_lookup = Organization.find_by(name: 'ZnunyOfFred') + assert_not(organization4_lookup) + + # case 5 - person with organization but organization is already assigned (own created) + customer5 = User.create( + firstname: '', + lastname: '', + email: 'testing5@znuny.com', + note: '', + organization_id: organization3_lookup.id, + updated_by_id: 1, + created_by_id: 1, + ) + assert(customer5) + + Observer::Transaction.commit + Delayed::Worker.new.work_off + + assert(ExternalSync.find_by(source: 'clearbit', object: 'User', o_id: customer5.id)) + + customer5_lookup = User.lookup(id: customer5.id) + assert_not_equal(customer5.updated_at, customer5_lookup.updated_at) + + assert_equal('Alex', customer5_lookup.firstname) + assert_equal('Dont', customer5_lookup.lastname) + assert_equal('some_bio_alex', customer5_lookup.note) + assert_equal('http://znuny.com', customer5_lookup.web) + assert_equal('Marienstraße 11, 10117 Berlin, Germany', customer5_lookup.address) + + organization5_lookup = Organization.find_by(name: 'Znuny GmbH') + assert_equal(organization3_lookup.id, organization5_lookup.id) + assert(ExternalSync.find_by(source: 'clearbit', object: 'Organization', o_id: organization5_lookup.id)) + assert_equal(false, organization5_lookup.shared) + assert_equal('OTRS Support, Consulting, Development, Training and Customizing - Znuny GmbH', organization5_lookup.note) + + # case 6 - no person / real api call + customer6 = User.create( + firstname: '', + lastname: '', + email: 'testing6@clearbit.com', + note: '', + updated_by_id: 1, + created_by_id: 1, + ) + assert(customer6) + + Observer::Transaction.commit + Delayed::Worker.new.work_off + + assert_not(ExternalSync.find_by(source: 'clearbit', object: 'User', o_id: customer6.id)) + + customer6_lookup = User.lookup(id: customer6.id) + assert_not_equal(customer6.updated_at, customer6_lookup.updated_at) + + assert_equal('', customer6_lookup.firstname) + assert_equal('', customer6_lookup.lastname) + assert_equal('', customer6_lookup.note) + assert_equal('http://clearbit.com', customer6_lookup.web) + assert_equal('', customer6_lookup.address) + + organization6_lookup = Organization.find_by(name: 'Clearbit') + assert(ExternalSync.find_by(source: 'clearbit', object: 'Organization', o_id: organization6_lookup.id)) + assert_equal(false, organization6_lookup.shared) + assert_equal('Clearbit provides powerful products and data APIs to help your business grow. Contact enrichment, lead generation, financial compliance, and more...', organization6_lookup.note) end @@ -253,7 +314,7 @@ class ClearbitTest < ActiveSupport::TestCase customer1 = User.create( firstname: '', lastname: 'Should be still there', - email: 'testing5@znuny.com', + email: 'testing6@znuny.com', note: '', updated_by_id: 1, created_by_id: 1,