summaryrefslogtreecommitdiff
path: root/FS/FS/part_export/test.pm
blob: 392fc4feb52537d44b67b3298b6e56c0aa9da481 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package FS::part_export::test;

use strict;
use vars qw(%options %info);
use Tie::IxHash;
use base qw(FS::part_export);

tie %options, 'Tie::IxHash',
  'result'  => { label    => 'Result',
                 type     => 'select',
                 options  => [ 'success', 'failure', 'exception' ],
                 default  => 'success',
               },
  'errormsg'=> { label    => 'Error message',
                 default  => 'Test export' },
  'insert'  => { label    => 'Insert', type => 'checkbox', default => 1, },
  'delete'  => { label    => 'Delete', type => 'checkbox', default => 1, },
  'replace' => { label    => 'Replace',type => 'checkbox', default => 1, },
  'suspend' => { label    => 'Suspend',type => 'checkbox', default => 1, },
  'unsuspend'=>{ label => 'Unsuspend', type => 'checkbox', default => 1, },
  'get_dids_npa_select' => { label => 'DIDs by NPA', type => 'checkbox' },
;

%info = (
  'svc'     => [ qw(svc_acct svc_broadband svc_phone svc_domain) ],
  'desc'    => 'Test export for development',
  'options' => \%options,
  'notes'   => <<END,
<P>Test export.  Do not use this in production systems.</P>
<P>This export either always succeeds, always fails (returning an error),
or always dies, according to the "Result" option.  It does nothing else; the
purpose is purely to simulate success or failure within an export module.</P>
<P>The checkbox options can be used to turn the export off for certain
actions, if this is needed.</P>
<P>This export will produce a small set of DIDs, in either Alabama (if the
"DIDs by NPA" option is on) or California (if not).</P>
END
);

sub export_insert {
  my $self = shift;
  $self->run(@_) if $self->option('insert');
}

sub export_delete {
  my $self = shift;
  $self->run(@_) if $self->option('delete');
}

sub export_replace {
  my $self = shift;
  $self->run(@_) if $self->option('replace');
}

sub export_suspend {
  my $self = shift;
  $self->run(@_) if $self->option('suspend');
}

sub export_unsuspend {
  my $self = shift;
  $self->run(@_) if $self->option('unsuspend');
}

sub run {
  my $self = shift;
  my $svc_x = shift;
  my $result = $self->option('result');
  if ( $result eq 'failure' ) {
    return $self->option('errormsg');
  } elsif ( $result eq 'exception' ) {
    die $self->option('errormsg');
  } else {
    return '';
  }
}

sub can_get_dids { 1 }

sub get_dids_npa_select {
  my $self = shift;
  $self->option('get_dids_npa_select') ? 1 : 0;
}

# we don't yet have tollfree

my $dids_by_npa = {
  'states' => [ 'AK', 'AL' ],
  # states
  'AK' => [],
  'AL' => [ '205', '998', '999' ],
  # NPAs
  '205' => [ 'ALABASTER (205-555-XXXX)', # an NPA-NXX
             'EMPTY (205-998-XXXX)',
             'INVALID (205-999-XXXX)',
             'ALBERTVILLE, AL', # a ratecenter
           ],
  '998' => [],
  '999' => undef,
  # exchanges
  '205555' => 
    [
      '2055550101',
      '2055550102'
    ],
  '205998' => [],
  '205999' => undef,
  # ratecenters
  'ALBERTVILLE' => [
    '2055550111',
    '2055550112',
  ],
},

my $dids_by_region = {
  'states' => [ 'CA', 'CO' ],
  'CA' => [ 'CALIFORNIA',
            'EMPTY',
            'INVALID'
          ],
  'CO' => [],
  # regions
  'CALIFORNIA' => [
    '4155550200',
    '4155550201',
  ],
  'EMPTY' => [],
  'INVALID' => undef,
};

sub get_dids {
  my $self = shift;
  my %opt = @_;
  my $data = $self->get_dids_npa_select ? $dids_by_npa : $dids_by_region;

  my $key;
  if ( $opt{'exchange'} ) {
    $key = $opt{'areacode'} . $opt{'exchange'};
  } else {
    $key =    $opt{'ratecenter'}
          ||  $opt{'areacode'}
          ||  $opt{'region'}
          ||  $opt{'state'}
          ||  'states';
  }
  if ( defined $data->{ $key } ) {
    return $data->{ $key };
  } else {
    die "[test] '$key' is invalid\n";
  }
}

1;