|
132 | 132 | expect(school).to be_valid |
133 | 133 | end |
134 | 134 |
|
135 | | - it 'does not require a reference' do |
136 | | - create(:school, id: SecureRandom.uuid, reference: nil) |
137 | | - |
| 135 | + it 'does not require a reference for non-UK schools' do |
| 136 | + school.country_code = 'IE' |
138 | 137 | school.reference = nil |
139 | 138 | expect(school).to be_valid |
140 | 139 | end |
141 | 140 |
|
| 141 | + it 'requires reference for UK schools' do |
| 142 | + school.country_code = 'GB' |
| 143 | + school.reference = nil |
| 144 | + expect(school).not_to be_valid |
| 145 | + expect(school.errors[:reference]).to include("can't be blank") |
| 146 | + end |
| 147 | + |
142 | 148 | it 'requires references to be unique if provided' do |
| 149 | + school.reference = '100000' |
| 150 | + school.save! |
| 151 | + |
| 152 | + duplicate_school = build(:school, reference: '100000') |
| 153 | + expect(duplicate_school).not_to be_valid |
| 154 | + end |
| 155 | + |
| 156 | + it 'accepts a valid reference format (5-6 digits)' do |
| 157 | + school.reference = '100000' |
| 158 | + expect(school).to be_valid |
| 159 | + end |
| 160 | + |
| 161 | + it 'accepts a 5-digit reference' do |
| 162 | + school.reference = '20000' |
| 163 | + expect(school).to be_valid |
| 164 | + end |
| 165 | + |
| 166 | + it 'rejects a reference with non-digit characters' do |
143 | 167 | school.reference = 'URN-123' |
| 168 | + expect(school).not_to be_valid |
| 169 | + expect(school.errors[:reference]).to include('must be 5-6 digits (e.g., 100000)') |
| 170 | + end |
| 171 | + |
| 172 | + it 'rejects a reference with too few digits' do |
| 173 | + school.reference = '1234' |
| 174 | + expect(school).not_to be_valid |
| 175 | + expect(school.errors[:reference]).to include('must be 5-6 digits (e.g., 100000)') |
| 176 | + end |
| 177 | + |
| 178 | + it 'rejects a reference with too many digits' do |
| 179 | + school.reference = '1234567' |
| 180 | + expect(school).not_to be_valid |
| 181 | + expect(school.errors[:reference]).to include('must be 5-6 digits (e.g., 100000)') |
| 182 | + end |
| 183 | + |
| 184 | + it 'allows reference reuse when original school is rejected' do |
| 185 | + school.reference = '100000' |
144 | 186 | school.save! |
| 187 | + school.reject |
| 188 | + |
| 189 | + new_school = build(:school, reference: '100000') |
| 190 | + expect(new_school).to be_valid |
| 191 | + expect { new_school.save! }.not_to raise_error |
| 192 | + end |
| 193 | + |
| 194 | + it 'does not require a district_nces_id for non-US schools' do |
| 195 | + school.country_code = 'GB' |
| 196 | + school.district_nces_id = nil |
| 197 | + expect(school).to be_valid |
| 198 | + end |
145 | 199 |
|
146 | | - duplicate_school = build(:school, reference: 'urn-123') |
| 200 | + it 'requires district_nces_id for US schools' do |
| 201 | + school.country_code = 'US' |
| 202 | + school.district_nces_id = nil |
| 203 | + expect(school).not_to be_valid |
| 204 | + expect(school.errors[:district_nces_id]).to include("can't be blank") |
| 205 | + end |
| 206 | + |
| 207 | + it 'requires district_nces_id to be unique if provided' do |
| 208 | + school.district_nces_id = '010000000001' |
| 209 | + school.save! |
| 210 | + |
| 211 | + duplicate_school = build(:school, district_nces_id: '010000000001') |
147 | 212 | expect(duplicate_school).not_to be_valid |
148 | 213 | end |
149 | 214 |
|
| 215 | + it 'accepts a valid district_nces_id format (12 digits)' do |
| 216 | + school.district_nces_id = '010000000001' |
| 217 | + expect(school).to be_valid |
| 218 | + end |
| 219 | + |
| 220 | + it 'rejects a district_nces_id with non-digit characters' do |
| 221 | + school.district_nces_id = '01000000000A' |
| 222 | + expect(school).not_to be_valid |
| 223 | + expect(school.errors[:district_nces_id]).to include('must be 12 digits (e.g., 010000000001)') |
| 224 | + end |
| 225 | + |
| 226 | + it 'rejects a district_nces_id with wrong length' do |
| 227 | + school.district_nces_id = '12345678901' |
| 228 | + expect(school).not_to be_valid |
| 229 | + expect(school.errors[:district_nces_id]).to include('must be 12 digits (e.g., 010000000001)') |
| 230 | + end |
| 231 | + |
| 232 | + it 'allows district_nces_id reuse when original school is rejected' do |
| 233 | + school.district_nces_id = '010000000001' |
| 234 | + school.save! |
| 235 | + school.reject |
| 236 | + |
| 237 | + new_school = build(:school, district_nces_id: '010000000001') |
| 238 | + expect(new_school).to be_valid |
| 239 | + expect { new_school.save! }.not_to raise_error |
| 240 | + end |
| 241 | + |
150 | 242 | it 'requires an address_line_1' do |
151 | 243 | school.address_line_1 = ' ' |
152 | 244 | expect(school).not_to be_valid |
|
0 commit comments