-
Notifications
You must be signed in to change notification settings - Fork 90
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2a3b411
commit 244aa77
Showing
15 changed files
with
1,057 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
--- | ||
# generated by https://github.com/hashicorp/terraform-plugin-docs | ||
page_title: "genesyscloud_integration_facebook Data Source - terraform-provider-genesyscloud" | ||
subcategory: "" | ||
description: |- | ||
Genesys Cloud integration facebook data source. Select an integration facebook by name | ||
--- | ||
|
||
# genesyscloud_integration_facebook (Data Source) | ||
|
||
Genesys Cloud integration facebook data source. Select an integration facebook by name | ||
|
||
## Example Usage | ||
|
||
```terraform | ||
data "genesyscloud_integration_facebook" "example_integrationfacebook" { | ||
name = "example_integrationfacebook data" | ||
} | ||
``` | ||
|
||
<!-- schema generated by tfplugindocs --> | ||
## Schema | ||
|
||
### Required | ||
|
||
- `name` (String) integration facebook name | ||
|
||
### Read-Only | ||
|
||
- `id` (String) The ID of this resource. |
Empty file.
3 changes: 3 additions & 0 deletions
3
examples/data-sources/genesyscloud_integration_facebook/data-source.tf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
data "genesyscloud_integration_facebook" "example_integrationfacebook" { | ||
name = "example_integrationfacebook data" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
* [POST /api/v2/conversations/messaging/integrations/facebook](https://developer.genesys.cloud/devapps/api-explorer#post-api-v2-conversations-messaging-integrations-facebook) | ||
* [GET /api/v2/conversations/messaging/integrations/facebook/{integrationId}](https://developer.genesys.cloud/devapps/api-explorer#get-api-v2-conversations-messaging-integrations-facebook--integrationId-) | ||
* [PATCH /api/v2/conversations/messaging/integrations/facebook/{integrationId}](https://developer.genesys.cloud/devapps/api-explorer#patch-api-v2-conversations-messaging-integrations-facebook--integrationId-) | ||
* [DELETE /api/v2/conversations/messaging/integrations/facebook/{integrationId}](https://developer.genesys.cloud/devapps/api-explorer#delete-api-v2-conversations-messaging-integrations-facebook--integrationId-) | ||
* [GET /api/v2/conversations/messaging/integrations/facebook](https://developer.genesys.cloud/devapps/api-explorer#get-api-v2-conversations-messaging-integrations-facebook) | ||
|
Empty file.
43 changes: 43 additions & 0 deletions
43
genesyscloud/integration_facebook/data_source_genesyscloud_integration_facebook.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package integration_facebook | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
"time" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" | ||
|
||
"terraform-provider-genesyscloud/genesyscloud/provider" | ||
"terraform-provider-genesyscloud/genesyscloud/util" | ||
) | ||
|
||
/* | ||
The data_source_genesyscloud_integration_facebook.go contains the data source implementation | ||
for the resource. | ||
*/ | ||
|
||
// dataSourceIntegrationFacebookRead retrieves by name the id in question | ||
func dataSourceIntegrationFacebookRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { | ||
sdkConfig := meta.(*provider.ProviderMeta).ClientConfig | ||
proxy := newIntegrationFacebookProxy(sdkConfig) | ||
|
||
name := d.Get("name").(string) | ||
|
||
return util.WithRetries(ctx, 30*time.Second, func() *retry.RetryError { | ||
facebookIntegrationRequestId, retryable, resp, err := proxy.getIntegrationFacebookIdByName(ctx, name) | ||
|
||
if err != nil && !retryable { | ||
return retry.NonRetryableError(util.BuildWithRetriesApiDiagnosticError(resourceName, fmt.Sprintf("Error searching integration facebook %s: %s", name, err), resp)) | ||
} | ||
|
||
if retryable { | ||
return retry.RetryableError(util.BuildWithRetriesApiDiagnosticError(resourceName, fmt.Sprintf("No integration facebook found with name %s", name), resp)) | ||
} | ||
|
||
d.SetId(facebookIntegrationRequestId) | ||
return nil | ||
}) | ||
} |
66 changes: 66 additions & 0 deletions
66
genesyscloud/integration_facebook/data_source_genesyscloud_integration_facebook_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
package integration_facebook | ||
|
||
import ( | ||
"fmt" | ||
"terraform-provider-genesyscloud/genesyscloud/provider" | ||
"terraform-provider-genesyscloud/genesyscloud/util" | ||
"testing" | ||
|
||
"github.com/google/uuid" | ||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" | ||
) | ||
|
||
/* | ||
Test Class for the integration facebook Data Source | ||
*/ | ||
|
||
func TestAccDataSourceIntegrationFacebook(t *testing.T) { | ||
t.Parallel() | ||
var ( | ||
testResource1 = "test_sample" | ||
testResource2 = "test_sample" | ||
name1 = "test_sample" | ||
supportedContentId1 = "6b3d7fb2-c276-415c-a5c7-d18eba936c68" | ||
pageAccessToken1 = uuid.NewString() | ||
messagingSettingId1 = "2c4e3b8e-3c9f-45c9-82cd-4bb54c8f18f0" | ||
appId = "" | ||
appSecret = "" | ||
) | ||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { util.TestAccPreCheck(t) }, | ||
ProviderFactories: provider.GetProviderFactories(providerResources, providerDataSources), | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: generateFacebookIntegrationResource( | ||
testResource1, | ||
name1, | ||
supportedContentId1, | ||
messagingSettingId1, | ||
pageAccessToken1, | ||
"", | ||
"", | ||
appId, | ||
appSecret, | ||
) + generateIntegrationFacebookDataSource( | ||
testResource2, | ||
name1, | ||
"genesyscloud_integration_facebook."+testResource1, | ||
), | ||
Check: resource.ComposeTestCheckFunc( | ||
resource.TestCheckResourceAttrPair("data.genesyscloud_integration_facebook."+testResource2, "id", "genesyscloud_integration_facebook."+testResource1, "id"), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func generateIntegrationFacebookDataSource( | ||
resourceId string, | ||
name string, | ||
dependsOnResource string) string { | ||
return fmt.Sprintf(`data "genesyscloud_integration_facebook" "%s" { | ||
name = "%s" | ||
depends_on = [%s] | ||
} | ||
`, resourceId, name, dependsOnResource) | ||
} |
60 changes: 60 additions & 0 deletions
60
genesyscloud/integration_facebook/genesyscloud_integration_facebook_init_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
package integration_facebook | ||
|
||
import ( | ||
"sync" | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||
) | ||
|
||
/* | ||
The genesyscloud_integration_facebook_init_test.go file is used to initialize the data sources and resources | ||
used in testing the integration_facebook resource. | ||
*/ | ||
|
||
// providerDataSources holds a map of all registered datasources | ||
var providerDataSources map[string]*schema.Resource | ||
|
||
// providerResources holds a map of all registered resources | ||
var providerResources map[string]*schema.Resource | ||
|
||
type registerTestInstance struct { | ||
resourceMapMutex sync.RWMutex | ||
datasourceMapMutex sync.RWMutex | ||
} | ||
|
||
// registerTestResources registers all resources used in the tests | ||
func (r *registerTestInstance) registerTestResources() { | ||
r.resourceMapMutex.Lock() | ||
defer r.resourceMapMutex.Unlock() | ||
|
||
providerResources[resourceName] = ResourceIntegrationFacebook() | ||
} | ||
|
||
// registerTestDataSources registers all data sources used in the tests. | ||
func (r *registerTestInstance) registerTestDataSources() { | ||
r.datasourceMapMutex.Lock() | ||
defer r.datasourceMapMutex.Unlock() | ||
|
||
providerDataSources[resourceName] = DataSourceIntegrationFacebook() | ||
} | ||
|
||
// initTestResources initializes all test resources and data sources. | ||
func initTestResources() { | ||
providerDataSources = make(map[string]*schema.Resource) | ||
providerResources = make(map[string]*schema.Resource) | ||
|
||
regInstance := ®isterTestInstance{} | ||
|
||
regInstance.registerTestResources() | ||
regInstance.registerTestDataSources() | ||
} | ||
|
||
// TestMain is a "setup" function called by the testing framework when run the test | ||
func TestMain(m *testing.M) { | ||
// Run setup function before starting the test suite for the integration_facebook package | ||
initTestResources() | ||
|
||
// Run the test suite for the integration_facebook package | ||
m.Run() | ||
} |
176 changes: 176 additions & 0 deletions
176
genesyscloud/integration_facebook/genesyscloud_integration_facebook_proxy.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,176 @@ | ||
package integration_facebook | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
"log" | ||
|
||
"github.com/mypurecloud/platform-client-sdk-go/v133/platformclientv2" | ||
) | ||
|
||
/* | ||
The genesyscloud_integration_facebook_proxy.go file contains the proxy structures and methods that interact | ||
with the Genesys Cloud SDK. We use composition here for each function on the proxy so individual functions can be stubbed | ||
out during testing. | ||
*/ | ||
|
||
// internalProxy holds a proxy instance that can be used throughout the package | ||
var internalProxy *integrationFacebookProxy | ||
|
||
// Type definitions for each func on our proxy so we can easily mock them out later | ||
type createIntegrationFacebookFunc func(ctx context.Context, p *integrationFacebookProxy, facebookIntegrationRequest *platformclientv2.Facebookintegrationrequest) (*platformclientv2.Facebookintegration, *platformclientv2.APIResponse, error) | ||
type getAllIntegrationFacebookFunc func(ctx context.Context, p *integrationFacebookProxy) (*[]platformclientv2.Facebookintegration, *platformclientv2.APIResponse, error) | ||
type getIntegrationFacebookIdByNameFunc func(ctx context.Context, p *integrationFacebookProxy, name string) (id string, retryable bool, resp *platformclientv2.APIResponse, err error) | ||
type getIntegrationFacebookByIdFunc func(ctx context.Context, p *integrationFacebookProxy, id string) (facebookIntegrationRequest *platformclientv2.Facebookintegration, response *platformclientv2.APIResponse, err error) | ||
type updateIntegrationFacebookFunc func(ctx context.Context, p *integrationFacebookProxy, id string, facebookIntegrationRequest *platformclientv2.Facebookintegrationupdaterequest) (*platformclientv2.Facebookintegration, *platformclientv2.APIResponse, error) | ||
type deleteIntegrationFacebookFunc func(ctx context.Context, p *integrationFacebookProxy, id string) (response *platformclientv2.APIResponse, err error) | ||
|
||
// integrationFacebookProxy contains all of the methods that call genesys cloud APIs. | ||
type integrationFacebookProxy struct { | ||
clientConfig *platformclientv2.Configuration | ||
conversationsApi *platformclientv2.ConversationsApi | ||
createIntegrationFacebookAttr createIntegrationFacebookFunc | ||
getAllIntegrationFacebookAttr getAllIntegrationFacebookFunc | ||
getIntegrationFacebookIdByNameAttr getIntegrationFacebookIdByNameFunc | ||
getIntegrationFacebookByIdAttr getIntegrationFacebookByIdFunc | ||
updateIntegrationFacebookAttr updateIntegrationFacebookFunc | ||
deleteIntegrationFacebookAttr deleteIntegrationFacebookFunc | ||
} | ||
|
||
// newIntegrationFacebookProxy initializes the integration facebook proxy with all of the data needed to communicate with Genesys Cloud | ||
func newIntegrationFacebookProxy(clientConfig *platformclientv2.Configuration) *integrationFacebookProxy { | ||
api := platformclientv2.NewConversationsApiWithConfig(clientConfig) | ||
return &integrationFacebookProxy{ | ||
clientConfig: clientConfig, | ||
conversationsApi: api, | ||
createIntegrationFacebookAttr: createIntegrationFacebookFn, | ||
getAllIntegrationFacebookAttr: getAllIntegrationFacebookFn, | ||
getIntegrationFacebookIdByNameAttr: getIntegrationFacebookIdByNameFn, | ||
getIntegrationFacebookByIdAttr: getIntegrationFacebookByIdFn, | ||
updateIntegrationFacebookAttr: updateIntegrationFacebookFn, | ||
deleteIntegrationFacebookAttr: deleteIntegrationFacebookFn, | ||
} | ||
} | ||
|
||
// getIntegrationFacebookProxy acts as a singleton to for the internalProxy. It also ensures | ||
// that we can still proxy our tests by directly setting internalProxy package variable | ||
func getIntegrationFacebookProxy(clientConfig *platformclientv2.Configuration) *integrationFacebookProxy { | ||
if internalProxy == nil { | ||
internalProxy = newIntegrationFacebookProxy(clientConfig) | ||
} | ||
|
||
return internalProxy | ||
} | ||
|
||
// createIntegrationFacebook creates a Genesys Cloud integration facebook | ||
func (p *integrationFacebookProxy) createIntegrationFacebook(ctx context.Context, integrationFacebook *platformclientv2.Facebookintegrationrequest) (*platformclientv2.Facebookintegration, *platformclientv2.APIResponse, error) { | ||
return p.createIntegrationFacebookAttr(ctx, p, integrationFacebook) | ||
} | ||
|
||
// getIntegrationFacebook retrieves all Genesys Cloud integration facebook | ||
func (p *integrationFacebookProxy) getAllIntegrationFacebook(ctx context.Context) (*[]platformclientv2.Facebookintegration, *platformclientv2.APIResponse, error) { | ||
return p.getAllIntegrationFacebookAttr(ctx, p) | ||
} | ||
|
||
// getIntegrationFacebookIdByName returns a single Genesys Cloud integration facebook by a name | ||
func (p *integrationFacebookProxy) getIntegrationFacebookIdByName(ctx context.Context, name string) (id string, retryable bool, resp *platformclientv2.APIResponse, err error) { | ||
return p.getIntegrationFacebookIdByNameAttr(ctx, p, name) | ||
} | ||
|
||
// getIntegrationFacebookById returns a single Genesys Cloud integration facebook by Id | ||
func (p *integrationFacebookProxy) getIntegrationFacebookById(ctx context.Context, id string) (integrationFacebook *platformclientv2.Facebookintegration, response *platformclientv2.APIResponse, err error) { | ||
return p.getIntegrationFacebookByIdAttr(ctx, p, id) | ||
} | ||
|
||
// updateIntegrationFacebook updates a Genesys Cloud integration facebook | ||
func (p *integrationFacebookProxy) updateIntegrationFacebook(ctx context.Context, id string, integrationFacebook *platformclientv2.Facebookintegrationupdaterequest) (*platformclientv2.Facebookintegration, *platformclientv2.APIResponse, error) { | ||
return p.updateIntegrationFacebookAttr(ctx, p, id, integrationFacebook) | ||
} | ||
|
||
// deleteIntegrationFacebook deletes a Genesys Cloud integration facebook by Id | ||
func (p *integrationFacebookProxy) deleteIntegrationFacebook(ctx context.Context, id string) (response *platformclientv2.APIResponse, err error) { | ||
return p.deleteIntegrationFacebookAttr(ctx, p, id) | ||
} | ||
|
||
// createIntegrationFacebookFn is an implementation function for creating a Genesys Cloud integration facebook | ||
func createIntegrationFacebookFn(ctx context.Context, p *integrationFacebookProxy, integrationFacebook *platformclientv2.Facebookintegrationrequest) (*platformclientv2.Facebookintegration, *platformclientv2.APIResponse, error) { | ||
return p.conversationsApi.PostConversationsMessagingIntegrationsFacebook(*integrationFacebook) | ||
} | ||
|
||
// getAllIntegrationFacebookFn is the implementation for retrieving all integration facebook in Genesys Cloud | ||
func getAllIntegrationFacebookFn(ctx context.Context, p *integrationFacebookProxy) (*[]platformclientv2.Facebookintegration, *platformclientv2.APIResponse, error) { | ||
var allFacebookIntegrationRequests []platformclientv2.Facebookintegration | ||
|
||
facebookIntegrationRequests, resp, err := p.conversationsApi.GetConversationsMessagingIntegrationsFacebook(1, 100, "", "", "") | ||
if err != nil { | ||
return nil, resp, fmt.Errorf("Failed to get facebook integration request: %v %v", err, resp) | ||
} | ||
if facebookIntegrationRequests.Entities == nil || len(*facebookIntegrationRequests.Entities) == 0 { | ||
return &allFacebookIntegrationRequests, resp, nil | ||
} | ||
for _, facebookIntegrationRequest := range *facebookIntegrationRequests.Entities { | ||
allFacebookIntegrationRequests = append(allFacebookIntegrationRequests, facebookIntegrationRequest) | ||
} | ||
|
||
for pageNum := 2; pageNum <= *facebookIntegrationRequests.PageCount; pageNum++ { | ||
const pageSize = 100 | ||
|
||
facebookIntegrationRequests, resp, err := p.conversationsApi.GetConversationsMessagingIntegrationsFacebook(pageNum, pageSize, "", "", "") | ||
if err != nil { | ||
return nil, resp, fmt.Errorf("Failed to get facebook integration request: %v %v", err, resp) | ||
} | ||
|
||
if facebookIntegrationRequests.Entities == nil || len(*facebookIntegrationRequests.Entities) == 0 { | ||
break | ||
} | ||
|
||
for _, facebookIntegrationRequest := range *facebookIntegrationRequests.Entities { | ||
allFacebookIntegrationRequests = append(allFacebookIntegrationRequests, facebookIntegrationRequest) | ||
} | ||
} | ||
|
||
return &allFacebookIntegrationRequests, resp, err | ||
} | ||
|
||
// getIntegrationFacebookIdByNameFn is an implementation of the function to get a Genesys Cloud integration facebook by name | ||
func getIntegrationFacebookIdByNameFn(ctx context.Context, p *integrationFacebookProxy, name string) (string, bool, *platformclientv2.APIResponse, error) { | ||
facebookIntegrationRequests, resp, err := getAllIntegrationFacebookFn(ctx, p) | ||
if err != nil { | ||
return "", false, resp, err | ||
} | ||
|
||
if facebookIntegrationRequests == nil || len(*facebookIntegrationRequests) == 0 { | ||
return "", true, resp, fmt.Errorf("No integration facebook found with name %s", name) | ||
} | ||
|
||
var facebookIntegration platformclientv2.Facebookintegration | ||
for _, facebookIntegrationRequest := range *facebookIntegrationRequests { | ||
if *facebookIntegrationRequest.Name == name { | ||
log.Printf("Retrieved the integration facebook id %s by name %s", *facebookIntegrationRequest.Id, name) | ||
facebookIntegration = facebookIntegrationRequest | ||
return *facebookIntegration.Id, false, resp, nil | ||
} | ||
} | ||
|
||
return "", true, resp, fmt.Errorf("Unable to find integration facebook with name %s", name) | ||
} | ||
|
||
// getIntegrationFacebookByIdFn is an implementation of the function to get a Genesys Cloud integration facebook by Id | ||
func getIntegrationFacebookByIdFn(ctx context.Context, p *integrationFacebookProxy, id string) (integrationFacebook *platformclientv2.Facebookintegration, response *platformclientv2.APIResponse, err error) { | ||
return p.conversationsApi.GetConversationsMessagingIntegrationsFacebookIntegrationId(id, "") | ||
} | ||
|
||
// updateIntegrationFacebookFn is an implementation of the function to update a Genesys Cloud integration facebook | ||
func updateIntegrationFacebookFn(ctx context.Context, p *integrationFacebookProxy, id string, integrationFacebook *platformclientv2.Facebookintegrationupdaterequest) (*platformclientv2.Facebookintegration, *platformclientv2.APIResponse, error) { | ||
return p.conversationsApi.PatchConversationsMessagingIntegrationsFacebookIntegrationId(id, *integrationFacebook) | ||
} | ||
|
||
// deleteIntegrationFacebookFn is an implementation function for deleting a Genesys Cloud integration facebook | ||
func deleteIntegrationFacebookFn(ctx context.Context, p *integrationFacebookProxy, id string) (response *platformclientv2.APIResponse, err error) { | ||
resp, err := p.conversationsApi.DeleteConversationsMessagingIntegrationsFacebookIntegrationId(id) | ||
if err != nil { | ||
return resp, err | ||
} | ||
|
||
return resp, err | ||
} |
Oops, something went wrong.