Skip to main content

Tests de l'API des visites de travail

Ce guide fournit des approches de test spécifiques et des exemples pour l'API Equinix Work Visits, en s'appuyant sur les principes généraux de test d'API.

Présentation de l'API Visites de travail

L'API Work Visits vous permet de planifier et de gérer par programmation les visites de travail dans les centres de données Equinix IBX, notamment:

  • Planification des visites de travail jusqu'à 14 jours
  • Gestion des renseignements sur les visiteurs et des autorisations d'accès
  • Mise à jour des renseignements et des contacts relatifs aux visites professionnelles
  • Exigences d'accès aux cages et armoires de manutention
  • Gestion des listes de visiteurs comprenant des utilisateurs inscrits et non inscrits

Note importante: Les visites de travail sont permises pour des séjours d'une durée maximale de 14 jours. Au-delà de 14 jours, une autorisation d'accès de sécurité est requise. Ce service ne peut être planifié que par un utilisateur disposant des droits de commande des services d'accès IBX.

Flux de travail de test des visites de travail

Avant de tester l'API Visites professionnelles, assurez-vous d'avoir:

  • Identifiants d'API valides avec autorisations de commande de visites professionnelles
  • Accès aux emplacements Equinix IBX où se trouvent vos cages
  • Identifiants de cage valides pour vos lieux de visite de travail
  • Compréhension des besoins des visiteurs et des processus d'identification

Création d'une demande de visite de travail

import requests
import json
from datetime import datetime, timedelta

# Setup authentication
auth_url = "https://api.equinix.com/oauth2/v1/token"
auth_payload = {
"grant_type": "client_credentials",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
}

auth_response = requests.post(auth_url, data=auth_payload)
token = auth_response.json()["access_token"]

# Test creating a work visit request
base_url = "https://api.equinix.com/colocations/v2"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}

# Calculate visit dates (future dates)
visit_start = (datetime.utcnow() + timedelta(days=3)).isoformat() + "Z"
visit_end = (datetime.utcnow() + timedelta(days=3, hours=8)).isoformat() + "Z"

# Example: Create a work visit request
work_visit_payload = {
"description": "Monthly routine maintenance and equipment inspection",
"customerReferenceId": "WV-REF-12345",
"purchaseOrder": {
"type": "EXISTING",
"number": "PO-789456"
},
"attachments": [
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "maintenance_checklist.pdf"
}
],
"contacts": [
{
"type": "TECHNICAL",
"registeredUsers": ["tech.admin@example.com"],
"availability": "WORK_HOURS",
"timezone": "America/New_York"
},
{
"type": "NOTIFICATION",
"registeredUsers": ["notifications@example.com"]
}
],
"details": {
"cages": [
{
"id": "SV1:01:001MC3",
"accountNumber": "12345",
"cabinetId": "SV1:01:001MC3:0101"
}
],
"visitStartDateTime": visit_start,
"visitEndDateTime": visit_end,
"openCabinet": True,
"visitors": [
{
"registeredUsers": ["john.doe@example.com"]
},
{
"firstName": "Jane",
"lastName": "Smith",
"companyName": "Acme Corporation",
"details": [
{
"type": "EMAIL",
"value": "jane.smith@acme.com"
},
{
"type": "MOBILE",
"value": "+1-555-123-4567"
}
]
}
]
}
}

create_response = requests.post(
f"{base_url}/orders/workVisits",
headers=headers,
data=json.dumps(work_visit_payload)
)

# Verify response
assert create_response.status_code == 201, f"Failed to create work visit: {create_response.text}"

# Extract order ID from Location header
order_number = create_response.json()["OrderNumber"]

print(f"Successfully created inbound shipment with order ID: {order_number}")

Création d'une visite de travail de plusieurs jours

# Example: Create a multi-day work visit (up to 14 days)
multi_day_start = (datetime.utcnow() + timedelta(days=5)).isoformat() + "Z"
multi_day_end = (datetime.utcnow() + timedelta(days=12)).isoformat() + "Z"

multi_day_payload = {
"description": "Data center migration project - Phase 1",
"customerReferenceId": "MIGRATION-PHASE1-2025",
"purchaseOrder": {
"type": "NEW",
"number": "PO-MIGRATION-001",
"amount": 5000,
"startDate": "2025-08-01",
"endDate": "2025-12-31"
},
"contacts": [
{
"type": "TECHNICAL",
"registeredUsers": ["migration.lead@example.com"],
"availability": "ANYTIME",
"timezone": "America/Los_Angeles"
}
],
"details": {
"cages": [
{
"id": "LA1:01:002MC5",
"accountNumber": "67890"
},
{
"id": "LA1:01:003MC1",
"accountNumber": "67890"
}
],
"visitStartDateTime": multi_day_start,
"visitEndDateTime": multi_day_end,
"openCabinet": False,
"visitors": [
{
"firstName": "Michael",
"lastName": "Johnson",
"companyName": "Migration Experts Inc",
"details": [
{
"type": "EMAIL",
"value": "mjohnson@migrationexperts.com"
},
{
"type": "MOBILE",
"value": "+1-310-555-9876"
}
]
},
{
"firstName": "Sarah",
"lastName": "Wilson",
"companyName": "Migration Experts Inc",
"details": [
{
"type": "EMAIL",
"value": "swilson@migrationexperts.com"
}
]
}
]
}
}

multi_day_response = requests.post(
f"{base_url}/orders/workVisits",
headers=headers,
data=json.dumps(multi_day_payload)
)

assert multi_day_response.status_code == 201, f"Failed to create multi-day work visit: {multi_day_response.text}"
print("Successfully created multi-day work visit request")

Mise à jour d'une demande de visite de travail

# Test updating work visit details
if order_id:
# Update work visit with new contact information
update_payload = {
"contacts": [
{
"type": "NOTIFICATION",
"registeredUsers": ["updated.notifications@example.com", "backup.contact@example.com"]
}
],
"details": {
"visitStartDateTime": (datetime.utcnow() + timedelta(days=4)).isoformat() + "Z",
"visitEndDateTime": (datetime.utcnow() + timedelta(days=4, hours=6)).isoformat() + "Z",
"openCabinet": False
}
}

update_response = requests.patch(
f"{base_url}/orders/workVisits/{order_id}",
headers=headers,
data=json.dumps(update_payload)
)

# Verify update response
assert update_response.status_code in [202, 204], f"Failed to update work visit: {update_response.text}"
print(f"Successfully updated work visit {order_id}")

Scénarios d'erreurs de test

Testez toujours la gestion des erreurs de votre implémentation d'API:

# Test with missing required fields
invalid_payload = {
"description": "Invalid request test",
"details": {
"visitStartDateTime": visit_start,
"visitEndDateTime": visit_end
# Missing required 'cages' and 'visitors' fields
}
}

error_response = requests.post(
f"{base_url}/orders/workVisits",
headers=headers,
data=json.dumps(invalid_payload)
)

# Verify error response
assert error_response.status_code == 400, f"Expected error but got: {error_response.status_code}"
error_data = error_response.json()
assert any("cages" in error.get("additionalInfo", {}).get("property", "") for error in error_data), "Expected cages validation error"

# Test with invalid visit duration (over 14 days)
long_visit_payload = {
"description": "Invalid long visit test",
"details": {
"cages": [{"id": "SV1:01:001MC3"}],
"visitStartDateTime": visit_start,
"visitEndDateTime": (datetime.utcnow() + timedelta(days=20)).isoformat() + "Z", # Over 14 days
"visitors": [{"registeredUsers": ["test@example.com"]}]
}
}

long_visit_response = requests.post(
f"{base_url}/orders/workVisits",
headers=headers,
data=json.dumps(long_visit_payload)
)

assert long_visit_response.status_code == 400, f"Expected duration validation error but got: {long_visit_response.status_code}"

# Test with invalid cage ID
invalid_cage_payload = {
"description": "Invalid cage test",
"details": {
"cages": [{"id": "INVALID:CAGE:ID"}],
"visitStartDateTime": visit_start,
"visitEndDateTime": visit_end,
"visitors": [{"registeredUsers": ["test@example.com"]}]
}
}

cage_error_response = requests.post(
f"{base_url}/orders/workVisits",
headers=headers,
data=json.dumps(invalid_cage_payload)
)

assert cage_error_response.status_code in [400, 403], f"Expected cage validation error but got: {cage_error_response.status_code}"

Meilleures pratiques pour les tests d'API des visites de travail

  1. Durée maximale des visites: Assurez-vous que les visites de travail ne dépassent pas 14 jours.
  2. Accès aux cages valide: Vérifiez les identifiants des cages et les autorisations des comptes avant les tests.
  3. Informations pour les visiteurs: Test effectué auprès de visiteurs inscrits et non enregistrés.
  4. Validation des contacts: Assurez-vous que les coordonnées et les paramètres de disponibilité sont corrects.
  5. Gestion des fuseaux horaires: Testez avec différents fuseaux horaires pour les sites internationaux.
  6. Accès aux armoires: Test avec ou sans demandes d’ouverture d’armoires
  7. Types de bons de commande: Testez les trois types de bons de commande (NOUVEAU, EXISTANT, EXEMPTÉ)
  8. Pièces jointes: Test de chargement des pièces jointes pour la documentation
  9. Validation des autorisations: Assurez-vous que les autorisations de commande des services d’accès IBX sont correctement configurées.

Considérations relatives à l'automatisation

Lors de la création d'une automatisation autour de l'API Visites de travail:

  • Mettre en place une validation pour une durée maximale de visite de 14 jours.
  • Intégrer une validation de la limite de visiteurs (maximum 50 visiteurs non inscrits)
  • Inclure une gestion appropriée des erreurs pour les problèmes d'accès aux cages et d'autorisation
  • Mettre en place des récepteurs de webhook pour les mises à jour de statut des visites professionnelles
  • Configurer la journalisation d'audit pour toutes les transactions liées aux visites de travail.
  • Assurez-vous que les renseignements concernant les visiteurs sont complets avant de créer des demandes.
  • Assurer une bonne gestion des fuseaux horaires pour les sites internationaux
  • Mettre en œuvre une validation des contacts appropriée pour les utilisateurs inscrits et non inscrits

Ressources additionnelles

Cette page vous a-t-elle été utile ?